I narrowed it down to this commit, which makes it a regression:
https://github.com/EpicGames/UnrealEngine/commit/dffdccfd8f867ee54833e135ea08ca7ae1c61210
Backing it out on my local build fixes the issue. From the code commit, it would seem that the intent was to move the logic to apply the result of an Async tree build to the game thread, but ExecuteOnGameThread() seems to want to work when there’s some time between Ticks which isn’t the case here, because we’re constantly updating Transforms in the tick. So the BuildTreeAsyncResult never gets applied until whatever is consuming the Tick pauses for a moment (which is why when you click outside the PIE window, the Tick suspends for a bit and lets the game thread pick up enqueued functors and you see your instances pop in).
I think another fix is required to either make sure the Tree is force-built first or that rendering a Tree which is being actively async-built accounts for this.
Hopefully an Epic dev can pick this up - unfortunately I have no way of running a proper regression test to be able to submit a PR for this.