Closing as not a bug. The gamepad plugin uses a radial deadzone, not an axial deadzone. So when you push the stick a radius of 90 in any direction away from the center (since you specify an analog deadzone of 90 in the given .capx), then you "unlock" the full precision of both the X and Y axes. For example moving it upwards as carefully as you can will eventually exceed the dead radius of 90, and then return a position something like (-0.01, -90.01) since it is nearly impossible to position the stick so that it measures exactly zero. Since you simply test positive or negative values, in this case the error on the X axis registers horizontal movement and makes them move diagonally.
The workaround is really simple: change your events to have an axial deadzone. Just compare < -25, > 25, etc. instead of comparing to 0.