Events occur when they do but sometimes not when documented. When conditioning code on them alone, the best one can do is to better understand their triggers and how to avoid them or make them happen, or to find another event, which often will be for another object.
Updates can be triggered expressly but also will occur unavoidably (along with their associated events) with a change in focus. Focus departs when the Access SQL engine runs, for a refresh, requery, or to load a subform. Constraining focus, e.g., by avoiding these, removing other objects from the tab order, or canceling keystrokes in the KeyDown event for the form or a control, can help. IIRC, one also can avoid form update events entirely if the form isn't bound.
This said, one can establish conditions that are evaluated when the relevant event occurs to permit or prevent execution. The mechanism can take the form of module-level Boolean variables that are set along the way, or a Boolean function (i.e., one that performs the test and returns True or False).
I did just this recently for a data entry form, where the only relevant event was the Change event for a single text box. I left the form unbound, removed all other controls from the tab order, and ran a mildly complex set of validation tests in a decision tree in that event procedure, with various lookups and counters being set along the way. I factored each test into its own Boolean function for simplicity. The key operation (record entry in this case, sending an email in yours) is triggered by this same event but only after all conditions are met.
Also, if you distinguish data entry from data presentation, you also might consider a separate data entry form that substitutes a combo box and pop-up (for data entry) for some or all of the subforms. It may not work for your desired UX but it will simplify the form, validation, and the handling of update triggers. You can trigger a pop-up expressly by double-clicking on its corresponding combo box, or with the combo box NotInList event if the user types in new data. Your main form's validation rule then might simply be that none of the combo boxes is Null. If the form is bound, you can validate in Form.BeforeUpdate (canceling the event on fail) and trigger the email in Form.AfterUpdate. If the form isn't bound, controls' Exit event may be most reliable.
Finally, reading your OP closely, you stated that the "main form" was on a tab page. Ordinarily, "main form" is understood to mean the form on which a tab control or subform exists. Any form on one of the tab pages, even the first tab page, is just another subform. Changing tabs will trigger updates for forms on the tab page one departs.