The internal oscillator doesn't appear to be stable enough for repeatable timing of the capacitor discharge, or for timing the RS232 bitrate

I will agree that the design may have difficulty during temperature extremes (I haven't tested at anything but room temperature yet). But I've tried it with 8 different chips so far (both plastic and windowed bought at different times) and I haven't had any problems from variances in the internal oscillator.

If it is getting the buttons mixed up, I would say make sure you're using a precision capacitor. If you're having trouble with the RS-232 timing too, I would say check your oscillator calibration value. Put your programmed chip back in the programmer and read it. If value at address 01FFh (or 03FFh if you are using a '509) is 0FFFh then the calibration value got erased.

If you do end up trying an external oscillator you'll need to move the cap and stick off GP4. The only place you can move it is GP2, because all the other pins have internal weak pullups. I'm not sure how the fact that it's a schmitt trigger input will affect the timing. Be sure to change the out_pot constant to reflect your pin change.

If you have any questions, feel free to send e-mail directly, Rob should have my address.