It works for the X and X axes , and I'm perplexed.
This is most likely because the gravity is stronger than your BodyVelocity. This script can be used to fix:
BodyVelocity.MaxForce = Vector3.new(NUMBER, NUMBER*(Part:GetMass()*196.2), NUMBER)
I think the problem here is that BodyVelocity.MaxForce.Y is too low for the object you are trying to move, especially since it works in the X and Z directions.
Roblox has a g constant of 196.2 studs/s^2, and the MaxForce in the Y direction defaults to 4000, so if the mass of the object you're trying to move is greater than 20 or so, a force of 4000 is not enough to overcome the force of gravity.
(If it isn't this, then I have no idea.)