You say this works:
Code:
double mFL = strafe + forward + rotation;
double mFR = strafe + forward - rotation;
double mRL = strafe - forward + rotation;
double mRR = strafe - forward - rotation;
You also show that none of the motors are inverted in the initialization.
That's weird. Your rear motors are reversed, and strafing definitely shouldn't run all the motors in the same direction. I suggest that you triple-check your wiring. And have someone else check it again afterwards. In fact, take some good photos of how you have it wired up and post them here so we can all go over them.
Something is definitely wrong, and I do not believe it is the WPI library.