With the default CharacterMovementComponent the listen server does this as well despite not jumping with any of the characters. I’ve only briefly tested with PIE, 3 players and Use Single Process active. It happens as soon as a client has its Character spawned. In this case StopJumping seems to never be called on the client itself though. The Character spawned for the listenserver does not cause this at all even if that Character jumps (breakpoint in ACharacter::StopJumping does not trigger here). The callstack on the listenserver is the following (UE4.24):
UE4Editor-Engine-Win64-Debug.dll!UCharacterMovementComponent::UpdateFromCompressedFlags(unsigned char Flags)
UE4Editor-Engine-Win64-Debug.dll!UCharacterMovementComponent::MoveAutonomous(float ClientTimeStamp, float DeltaTime, unsigned char CompressedFlags, const FVector & NewAccel)
UE4Editor-Engine-Win64-Debug.dll!UCharacterMovementComponent::ServerMove_Implementation(float TimeStamp, FVector_NetQuantize10 InAccel, FVector_NetQuantize100 ClientLoc, unsigned char MoveFlags, unsigned char ClientRoll, unsigned int View, UPrimitiveComponent * ClientMovementBase, FName ClientBaseBoneName, unsigned char ClientMovementMode)
UE4Editor-Engine-Win64-Debug.dll!ACharacter::ServerMoveNoBase_Implementation(float TimeStamp, FVector_NetQuantize10 InAccel, FVector_NetQuantize100 ClientLoc, unsigned char CompressedMoveFlags, unsigned char ClientRoll, unsigned int View, unsigned char ClientMovementMode)
UE4Editor-Engine-Win64-Debug.dll!ACharacter::execServerMoveNoBase(UObject * Context, FFrame & Stack, void * const Z_Param__Result)
UE4Editor-CoreUObject-Win64-Debug.dll!UFunction::Invoke(UObject * Obj, FFrame & Stack, void * const Z_Param__Result)
UE4Editor-CoreUObject-Win64-Debug.dll!UObject::ProcessEvent(UFunction * Function, void * Parms)
UE4Editor-Engine-Win64-Debug.dll!AActor::ProcessEvent(UFunction * Function, void * Parameters)
UE4Editor-Engine-Win64-Debug.dll!FObjectReplicator::ReceivedRPC(FNetBitReader & Reader, const FReplicationFlags & RepFlags, const FFieldNetCache * FieldCache, const bool bCanDelayRPC, bool & bOutDelayRPC, TSet<FNetworkGUID,DefaultKeyFuncs<FNetworkGUID,0>,FDefaultSetAllocator> & UnmappedGuids)
UE4Editor-Engine-Win64-Debug.dll!FObjectReplicator::ReceivedBunch(FNetBitReader & Bunch, const FReplicationFlags & RepFlags, const bool bHasRepLayout, bool & bOutHasUnmapped)
UE4Editor-Engine-Win64-Debug.dll!UActorChannel::ProcessBunch(FInBunch & Bunch)
UE4Editor-Engine-Win64-Debug.dll!UActorChannel::ReceivedBunch(FInBunch & Bunch)
UE4Editor-Engine-Win64-Debug.dll!UChannel::ReceivedSequencedBunch(FInBunch & Bunch)
UE4Editor-Engine-Win64-Debug.dll!UChannel::ReceivedNextBunch(FInBunch & Bunch, bool & bOutSkipAck)
UE4Editor-Engine-Win64-Debug.dll!UChannel::ReceivedRawBunch(FInBunch & Bunch, bool & bOutSkipAck)
UE4Editor-Engine-Win64-Debug.dll!UNetConnection::ReceivedPacket(FBitReader & Reader)
UE4Editor-Engine-Win64-Debug.dll!UNetConnection::ReceivedRawPacket(void * InData, int Count)
UE4Editor-OnlineSubsystemUtils-Win64-Debug.dll!UIpConnection::ReceivedRawPacket(void * Data, int Count)
UE4Editor-OnlineSubsystemUtils-Win64-Debug.dll!UIpNetDriver::TickDispatch(float DeltaTime)
UE4Editor-Engine-Win64-Debug.dll!TBaseUObjectMethodDelegateInstance<0,UNetDriver,TTypeWrapper<void> __cdecl(float)>::Execute(float <Params_0>)
UE4Editor-Engine-Win64-Debug.dll!TBaseUObjectMethodDelegateInstance<0,UNetDriver,void __cdecl(float)>::ExecuteIfSafe(float <Params_0>)
UE4Editor-Engine-Win64-Debug.dll!TBaseMulticastDelegate<void,float>::Broadcast(float <Params_0>)
UE4Editor-Engine-Win64-Debug.dll!UWorld::Tick(ELevelTick TickType, float DeltaSeconds)
UE4Editor-UnrealEd-Win64-Debug.dll!UEditorEngine::Tick(float DeltaSeconds, bool bIdleMode)
UE4Editor-UnrealEd-Win64-Debug.dll!UUnrealEdEngine::Tick(float DeltaSeconds, bool bIdleMode)
UE4Editor-Win64-Debug.exe!FEngineLoop::Tick()
UE4Editor-Win64-Debug.exe!EngineTick()
Your fix actually seems like a good solution, but I wonder whether the check for the second bool was missing intentionally.
Maybe there are alternative solutions to the problem? What are you trying to achieve?