So in order to flawlessly change root component at runtime, there are exactly three lines that need to be done
auto c = Entity->AddComponentByClass(USomeComponent::StaticClass(), true, FTransform::Identity, false)); //create
c->SetTransform(Entity->GetRootComponent()->GetComponentTransform()); //set global coords as transform
SetRootComponent(c);
That’s it.
There is a bug that will crash/freeze the editor if you try to set root component something thats already attached to the current root component (possibly some infinite loop?)