Overriding mobility in a placed blueprint after the blueprint has overriden the mobility of a C++ class breaks

Situation:

I have a C++ class that’s a child of AActor. It defines a SceneComponent to act as the root component to simulate the default scene component that gets created when you use a blueprint. This is set in what seems to be the default way based on other answers:

Header:

class GT_API AGTGoals : public AActor
...
protected:

	/**
	 * Root component.
	 */
	UPROPERTY(VisibleAnywhere, Category = "GTGoals")
	USceneComponent* SceneRootComponent;

.cpp:

AGTGoals::AGTGoals()
{
 	....

	// create root component
	SceneRootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("DefaultSceneRoot"));
	RootComponent = SceneRootComponent;
}

I then create a blueprint child of this to add another static mesh component. Because I want most of these to be static I change the mobility of movable to static on both the scene root, and the static mesh I added. Placing these in-game works fine.

I now want some of them to move. I change the mobility of the scene root component and child mesh on one instance placed in a level back to movable, instantly the child mesh flicks back to the world origin, 0,0,0. Moving the placed actor now no longer moves that component.

This doesn’t occur with a blueprint Actor, that receives a default scene component.

Tested changes:

I tried the following to fix it, none worked:

Test changing VisibleAnywhere to EditAnywhere with existing BP: Didn’t fix.

Same with new fresh BP: Didn’t fix.

Test making it private with UFUNCTION(meta = (AllowPrivateAccess = "true")): Didn’t fix.

Same with fresh BP: Didn’t fix.

Test making it public: Didn’t fix.

Same with fresh BP: Didn’t fix.

Test changing the component name: Didn’t fix.

Same with fresh BP: Didn’t fix.

Test no variable, and assigning the new object directly as the root component: Can no longer edit the root component, greyed out. Stuck at static under greyed out. Can change mobility of attached mesh and it doesn’t move, but need to move the whole thing.

Test making it public with no UPROPERTY specifier: Same, can’t edit.

Test setting the root component to static in C++: Didn’t fix.

Same with fresh BP: Didn’t fix.

Workaround:

As a workaround, creating a new blueprint child of either the original C++ class or the first blueprint, and changing the mobility back to movable there, then placing it in the world, works. However it seems like this shouldn’t be necessary.

Is this a bug or intended behaviour? Is there any way to fix this?