Proper way to call mdl.eval() and mdl.train() so that checkpointing saves all parameters?

Yes, this is the proper way.

No, that’s not the case and unfortunately you didn’t follow up in your other thread.
Saving the state_dict doesn’t have any known issues regarding previous calls to model.train() or model.eval(), so my guess is still that you might be manually deactivating the running stats updates.
If that’s not the case, please post a minimal executable code snippet which would reproduce the issue.