this leads me to believe bglmanx64 has forgotten to unregister a callback when it's unloaded. Thoughts?
bglmanx64.dll has forgot to unregister anything. If it did, it would happened each time, to every user.
What is really happening, instead, is the sim crashed for other reason, so it couldn't send the message to all connected Simconect clients, which is what they need in order to start their own clean up procedures where they, of course, unregister whatever they need to unregister.
So yes, maybe this is what is happening (a pointer is not freed, some memory is not released, a callback is not deregistered), but bglman64.dll is not the cause here, it's the victim of the sim abrupt crash caused by other reasons, which is preventing to do all its own cleanup, which is always done correctly under normal conditions, when the sim is not crashing for other reason.