One possibility is that the field is not on the layout (a requirement of Insert Calculated Result). Why not just use Set Field? That won't require the field be on the layout.
Also, OnObjectModify is not generally a good place to do something like this. In a checkbox, it happens to not matter as much, but in a text field it would trigger on every keystroke, so I would get into the habit of OnObjectSave.
Also make sure you account for (or block) somebody unchecking the box. If allowed, and you want to then clear those fields, you can do an If/Then/Else on the checkbox value to either set or clear the field values.
That helped heaps, it's now working . Now I just need to figure out how to include the scripting for the if/then/else you mentioned to stop them or at least make them think before they untick the checkbox
Something to the effect of:
If[Production::Received = "Yes"] Then
Set Field[Production::Received by; Get ( AccountName)]
Set Field[Select; Production::Received by; Get ( CurrentTimeStamp)]
Show Custom Dialog["Are you sure you want to UNMARK this item as received and clear the Name/Timestamp?"]
// Assuming Button 1 is yes
Set Field[Production::Received by; ""]
Set Field[Select; Production::Received by; ""]
#reset the Received field back to Yes
Set[Production::Received = "Yes"]
Now, you could alternatively do your safety check in an onobjectvalidate trigger, and nullify the change from "Yes" to "" before it actually takes place. THat method is porbably a more correct way to do it, but I tend to try to group/combine my triggered scripts so I can do as much with one trigger as possible, leaving the other trigger space open for a completely different script if I need.
Thank you so very much for your helps, it's now all working a treat!