From the directx documentation
The data returned for the x-axis and y-axis of a mouse indicates the movement of the mouse itself, not the cursor. The units of measurement are based on the values returned by the mouse hardware and have nothing to do with pixels or any other form of screen measurement. Because Microsoft?DirectInput?communicates directly with the mouse driver, the values for mouse speed and acceleration set by the user in Control Panel do not affect this data.
So, erm, your screwed
There are a number of things that might cause the negative data. The driver is one, the value from the mouse driver might be velocity, not distance moved, so you would need to factor time into figuring out the distance moved. You might also be filling the buffer when the mouse is moving quickly. In the old version of jinput it dumped a statement out when the buffer overflowed. I could do a magic build with it back in, just to see if this is your problem.
You might want to consider trying the raw plugin, but I suspect that again it talks to the mouse driver direct.edit: The AWT plugin will give you the mouse movement in pixels.