Hi Richard,
Just a thought here: look into comparing the OldValue and NewValue of your event in your OnBeforeChange. If you chaged the value, OldValue will be different than NewValue, but on Insert, both may be identical.
Let me know if that works.
Regards,
Franck Dauché
InfoPathDev