UE4.27.2 Moving (Hierarchical) Instanced Static Meshes with Custom Data render black in Game but fine when paused

Tested in UE 5.5, the fix is to use BuildTreeIfOutdated(false, true) on each frame tick after the gameplay/projectile positions update. Use after making changes to the (H)ISMC:
HISMC->BuildTreeIfOutdated(false, true);
(bool Async, bool ForceUpdate)
As the function says it will force rebuild the entire tree.

Projectile pools with a medium/large number of actors is a tricky case since collision can completely tank the frame rate, and async/gpu systems can be a pain to sync with. Niagara systems are great for cosmetics-only effects such as a spinning particle cone, but for anything involving collisions and movement on the particle level and actual callbacks - like a swarm of missiles with distance LODs - it’s understandable to consider HISMC or a large amount of AActors w/ mesh.

Not sure what the go-to should be for a projectile pool of say 300 homing projectiles. There’s the occasional selective dynamic collision or query traces, and a choice of pooled AActor, HISMC, and even Niagara.