LazyLoading - OnLoaded Fire Sequence

I just ran into something that confused me. I based these off the docs, so hopefully they're following convention. Say I have a content part called MyPart that has a lazy-loaded property called MyLazyProp defined as such:

I had a bit of a dig around DefaultContentManager and the driver/handler code to see what's going on. I think this has something to do with the following code, from the Get(id,options) method of DefaultContentManager:

// when draft is required and latest is published a new version is appended if (options.IsDraftRequired && versionRecord.Published) {
return BuildNewVersion(context.ContentItem);
}

Now, in AdminController's Edit (GET) action, the content item is loaded like this:

var contentItem = _contentManager.Get(id, VersionOptions.Latest);

Whereas in the EditPOST action which handles the update, we see this instead:

So; on the POST, the item is still being loaded from the database and your OnLoaded handler will run.
But then a new version of the item is built to be saved as the latest version record. Consequently the OnLoaded handler won't get run for this version, because it's brand new - not loaded from the database.

I think you need to try Active or Initialize events instead, since they'll get run in either circumstance.