After more debugging. I'm going to say this is NOT what is going on. The form load event is firing.
My actual issue is that on Chrome\Edge (but not on FireFox) the html web resource is getting reloaded after the form load by just a couple milliseconds. So that my code is running but then the web resource refreshes afterward. I fixed it by adding a timeout. I had thought that the getContentWindow() call would handle this, but apparently not.
I had to add the setTimeout call in the following code to make it work.
function formLoad(context)
{
var formContext = context.getFormContext();
var productOptionsIFrame = formContext.getControl('WebResource_ProductOptionPicker');
if (productOptionsIFrame) {
setTimeout(function () {
productOptionsIFrame.getContentWindow().then(function (w) {
w.RefreshOptionPicker(Xrm, formContext);
}
); // force reload
}
, 1000);
}
}