You can use Exit Script [false] to keep the field exit event from taking you to the next field in the tab order.
Yes! I should remember to use that... That solves 1 of my problems! :-)
Doesn't that make OnObjectExit work here for what you want?
I used a different method, but yours looks like it should work.
I used onObjectEnter to copy the orginal value into a global variable: $$OldValue
Then used OnObjectSave to perform a script that used Show Custom Dialog to confirm the changed. If the user rejected the change, Set Field copied the value of $$OldValue back into the field to revert the value.