PaulS:
You have interrupt service routines and other functions accessing the same variables, and those variables are not declared volatile.
what do you mean not declared as volatile, which ones? this is my first time working with encoders and I am not sure what you are talking about.
What motor shield are you using? Does it use pins 2 and 3? Are the encoders connected to those pins?
I using the the adafruit motorshield. I am not sure but I think it uses interrupt 2. I tried to connect the encoders to another arduino while running the motion code on the car and it gave me the same weird readings.