It sounds like you are hooking into the **Processed** (or later) phase of the *Save* operation, which will only be called after the save has happened. 

You should instead hook into the **Initiated** phase of the save. This one occurs *before* the save and so giving the field a value will satisfy the mandatory requirement of the field when the save does occur.