UPROPERTY of UActorComponent field changed in C++ not changing on Editor details window and not reseting with new BeginPlay

I have an component in my UE5 project (custom state machine):

UCLASS(ClassGroup = States, meta = (BlueprintSpawnableComponent), Blueprintable, BlueprintType)
class EP1_API UStateMachineComponent : public UActorComponent {
 GENERATED_BODY()

public:
 UPROPERTY(BlueprintReadOnly, VisibleAnywhere)
	ECharacterState state; //my enum

    void UStateMachineComponent::BeginPlay() {
        Super::BeginPlay();
        state = ECharacterState::Idle;
    }

UFUNCTION(BlueprintCallable)
	bool SwitchState(ECharacterState NewState); //only way to change state
UFUNCTION(BlueprintCallable)
	FORCEINLINE ECharacterState GetCurrentState() const { return state; }
};

I have this component inside my Character class (then I have BP class that inherits from it, and on top of it another BP class inheriting from previous BP class):

UCLASS(Blueprintable)
class EP1_API ACharacterBase : public ACharacter, public ICharacterI {
  GENERATED_BODY()

public:
  	UPROPERTY(BlueprintReadOnly, VisibleAnywhere)
	TObjectPtr<UStateMachineComponent> StateMachine;

   ACharacterBase() {
       StateMachine = CreateDefaultSubobject<UStateMachineComponent>(TEXT("StateMachine"));
   }
 ...
}

During gameplay, I have some object that upon interaction calls to SwitchState with ECharacterState::Sitting.

When I hit play for the first time, on details panel of my Character I can see StateMachine component with state Idle (grayed out, not editable, as it should be). When I reach a chair, it calls SwitchState, it triggers the breakpoint in C++ and I see it calling my state change.
But when I look at details panel of Character it keeps showing the Idle instead of Sitting (regardless if I select another object and select Character again to refresh or anything):

At the same time, in C++, when I place breakpoints in different places, it shows me Sitting:
cpp

Why there is such difference?

Even more strange. When I stop game and hit play again, details shows Idle but Character is already in Sitting state (in C++), from previous game session (despite I set it to Idle at start in component’s BeginPlay() - which I see being called).

From what I see in Visual Studio debugger, inside BeginPlay() of my UStateMachineComponent this has different address than what I get later during game (almost like I have some mixed-up pointers there… or getting the Character or StateMachine from previous game in C++).

More investigation brought me to:

I have 2 Characters (one is for Player and another is NPC) in my Level.

When I build the project from Visual Studio I get multiple calls (maybe 10-20 times) to UStateMachineComponent and ACharacterBase constructors before Editor Starts.

But when I hit play in Editor, as expected, I get two calls to UStateMachineComponent constructor (let’s say they memory addresses are Mx001 and Mx002) and two calls to ACharacterBase (Cx001 for NPC and Px002 for Player). In line:

StateMachine = CreateDefaultSubobject<UStateMachineComponent>(TEXT("StateMachine"));

My NPC gets StateMachine pointer set to Mx001 and my Player (Px002) gets Mx002. So far so good.

But later, in my chair logic, when I request for the character (through some ICharacterI Interface), there is a method in CharacterBase getting called (overriden from this Interface):

virtual UStateMachineComponent* GetStateMachine_Implementation() override {
	return StateMachine;
}

And here my StateMachine does NOT point to Mx002 but some different Mx003 (while Player itself stills looks to be at memory address Px002).

It almost looks like my variable has been replaced with another one. How is that possible?

Is there some “deserialization” or “state recovery” going one that messes up my Character’s UPROPERTY StateMachine? I know that pointer to Character itself is correct and consistent (also if it has some simple UPROPERTY of bool type, it keeps the correct value and does not reset), but it’s field StateMachine acts strangely.

Can it have anything to do with the fact that I am creating the StateMachine inside ACharacterBase constructor which is base class for BP which is base for another BP which is my actual PlayerBP? If so, how to do it differently (I still want to have StateMachine directly inside ACharacterBase and not just only in deactivated BP.
In PostInitProperties of ACharacterBase I already see that my StateMachine memory address get’s changed. If it’s not market as UPROPERTY it stays correct (as in constructor).