Since this is the only result for this on the entirety of the interwebs, I’ll give what I found and hope it helps some future traveler…
EDIT: I posted a long paragraph here about how I had to check my pointers in really weird ways to solve this issue, but the real solution is much simpler: I wasn’t marking my UMaterialInstanceDynamic pointers as UPROPERTY(), so they were getting unexpectedly picked up by garbage collection. Add UPROPERTY() to your UObjects if you don’t want them suicided.