Good question!

It's one of those things that was in the book since forever and I never questioned it. Just went on using it.
But now that you ask, and I look for the correct answer ... I can't see where it's needed on a chip with 2K or less.

GOTO and CALL statements encode 11 bits of the address into the opcode, and 11 bits covers the full 2K.
There's no reason for it to use the upper 2 bits, and therefore you shouldn't need to save PCLATH.

I'll ask Jeff (he's out of town right now) and see if he had a reason for it.

Since your ISR doesn't use the FSR, you don't need to save/restore it either.

But back to your problem ...
If the oscillator stops running, it sounds like a sleep instruction was executed.
Do you have any SLEEP's in your code.

Or maybe the MCLR pin is being pulled low somehow. Check the voltage on MCLR when the problem happens.

Possibly a brownout condition, check VDD voltage when the problem happens.