Can you explain to me how your movement works under water? What starts it and what gets it to stop? You don’t actually use water, you use your own thing. So I’m not sure how your swimming is supposed to work.
When the character is in water the humanoid’s state is set to Freefall exclusively, so the horizontal movement is controlled as standard.
There is a BodyVelocity named SwimVel in the HumanoidRootPart which handles the vertical movement which is controlled by jump and the dive keybind (LeftShift) while swimming in the water.
It seems when the Velocity’s MaxForce is set to 8000 on the Y axis the character is flung leftwards when the BodyVelocity’s Y Velocity is set to a number other than 0.
Essentially, the bug occurs when there is no up or down movement from the velocity in the character when in water.