Hey. Solved my own problem.
Turns out it wasn't opera specific, but was happening in any X program.
For some reason, when I install the XFree86 .deb, it had left the "generic mouse" entry in the config, and configured an additional "Configured mouse" - with SendCore options- and put it in server layout
I've often had two mouses configured, but never more than one being used, so I didn't think anything of it at first glance.
The two mice were on seperate devices - /dev/psaux and /dev/input/mice - which were both active and reading my single pointer.
So basically, the silly config script was reading the same pointer twice, and treating it as two calls of every move I made.
Removing one of the pointer devices solved the problem.