Advanced custom movement class (for Flying)

(obviously hard to guess without a debugger, there’s a lot of code here, but I’ll comment just in case)

This block in your last snippet still uses UE’s ApplyVelocityBraking, which seems very likely to be causing the stutter since it’s using the single built-in speed limit instead of your horizontal/vertical speed limits.

// Only apply braking if there is no acceleration, or we are over our max speed and need to slow down to it.
    if ((bZeroAcceleration && bZeroRequestedAcceleration))
    {

        const float ActualBrakingFriction = (bUseSeparateBrakingFriction ? BrakingFriction : Friction);
        ApplyVelocityBraking(DeltaTime, ActualBrakingFriction, BrakingDeceleration);

    }