Why is BeginDestroy() called twice for a Pawn after a Hot Reload?

I was using BeginPlay() and BeginDestroy() to initialize and clean up some things for my Pawn, and everything was working fine until I hit the Compile button to do a Hot Reload then pressed the Play button. That’s where some weird stuff started happening, so I put debug messages in both of those functions to see what was going on.

As you can see in the screenshot below, BeginDestroy() was being called twice before BeginPlay() was called at all.

This only happens after a Hot Reload, and I can find workarounds just fine, but I’m wondering if it’s actually broken or if there’s something I’m missing.

Hot reload is broken. I advise against its use, and the sooner you start avoiding it, the less issues you will have.