I think you may just need to adjust the pre load for the timer. If you have access to an O-scope, toggle an output in the INT routine so you can see the actual timing.

Once the preload is correct, you should find the time is spot on.