The stacktrace show that your UWorld get destroyed because of this condition.
if (!bCreatingCDO && (!bCanRecycleSubobjects || !Obj->IsDefaultSubobject()))
If I understand the code correctly, Your newly created UWorld is subobject of something.
The code think that your subobject will probably come from constructor later, so it decides to destroy your newly created UWorld to prevent unnecessary uobject.