The G28 U0 command should zero out the X axis just fine, but the DIRECTION of zero return is fixed with a parameter setting. If the zero-return switch is in the center (instead of at the extreme X+ limit), the you must be on the X+ side of the switch if you zero-return. Otherwise, it will just move in the +X direction and (not) hit the switch, then overtravel.
If you are on the X- side of zero and give it a G28 U0, does it stop in the middle, or does it go to near the +X limit and stop at zero?
If it stops in the middle, then you're already PAST the switch when you're on the X+ side of center.