mmm, something spring to mind now form your first post, you said it was suppose to produce 8KHz but, in real-world, it produce 4KHz.

DEFINE OSC 8 don't change the internal OSC speed, it's more a compiler directive to match PAUSE, PAUSEus and all other timed stuff with the real OSC speed.

POR value for the internal osc is 4 MHZ, to change it to 8 MHZ you want to use

Code:
OSCCON = %01110000    ' this set the internal osc to 8MHz
for now i can't check the whole thing here, but let us know if the above fix something. At very least, you should have the right PWM frequency.

HTH