Skeletal animation not playing with a different UWorld

I found a solution for this today, and it turned out to be rather simple.

When a skeletal mesh component is ticked, the animation curves are indeed evaluated and the bones are updated. This also sets a dirty flag (bRenderDynamicDataDirty) which tells the renderer that the mesh’s dynamic data needs to be updated as well. Without updating the dynamic data, the skeletal mesh is always rendered in the reference pose.

To update the dynamic data, all that is needed is to call an additional function after TickComponent:

for (UActorComponent *comp : ListOfComponentsToUpdate) {
	comp->TickComponent(deltaSeconds, LEVELTICK_All, nullptr);
	comp->DoDeferredRenderUpdates_Concurrent();
}

It looks like a full world tick goes through this same process, doing the render updates just before the beginning of frame rendering. Currently (as of UE4.9 at least), Unreal doesn’t support ticking of a subworld contained within a component of the main world, so the above solution seems to be the easiest workaround.