Index 2 is not valid. You have two elements, 0 and 1.
index 2 still comes up with the right numbers, but for good measure I tried a couple of things out.
First
int data[3];
mouse.report(data);
...
if (data[2] > 0 )
Works just as before after setting this up, as I expected.
So, just to check something
int data[2];
mouse.report(data);
...
Serial.print(data[3]);
This did not throw an error at compile. It wouldn't show the right number, but it didn't crash. So I'm guessing this is just a difference between explicit and implicit declarations? I've left it with the int data[3]; though just to make sure. Regardless this hasn't solved the issue, and I had ditched turning the interrupts off and on. Thanks for the help.