My theory is that your system causes issue with the replication of character’s ReplicatedBasedMovement variable, which contains a reference to the component character is based on. Since these actors/components are dynamically spawned but not replicated, they cannot be referenced over the wire, so there must be some nullptr issue indeed, causing the falling state. It may not always happen since the simulated proxy probably also tries to predict landing/base, so there’d be a race condition between prediction and replication…
This is a long shot, but can you enable Verbose logging on CharacterMovement and see if you get this message ?
UE_LOG(LogCharacterMovement, Verbose, TEXT("Base for simulated character '%s' is not resolved on client, skipping SimulateMovement"), *CharacterOwner->GetName());
Also, try overriding functions or binding delegates in your character class and log some info to figure out what’s happening
UPROPERTY(BlueprintAssignable, Category=Character)
FLandedSignature LandedDelegate; // bind this
UPROPERTY(BlueprintAssignable, Category=Character)
FMovementModeChangedSignature MovementModeChangedDelegate; // bind this
virtual void OnRep_ReplicatedBasedMovement(); // override this (don't forget to call Super)