Hi,
First of all, the manual states that the duration part of the sound statement should be 0-255, you're specifying 65535.
Second, and what I think is the main "mistake", is in your interpretation of how ON INTERRUPT works.

ON INTERRUPT isn't a real hardware interrupt. It will only check the interrupt flag between each PBP statement. If you specify a sound duration of 255 the sound command takes 255*12ms=3060ms so the ISR will only execute once ever ~3 seconds even if TMR0 overflows once every 65ms. Had it worked with 65535 as the duration the ISR would only execute every 786th second.

Finally, doing things like IF X>255 THEN when X is declared as a BYTE doesn't do anything because X can never be larger than 255 anyway. You can safely keep adding 5 to it, it will wrap around by itself.

Hope it helps.

/Henrik.