Agree if that is an external oscillator, then use the EC_ option for clock source. Is that clock source always stable? (is there any other way to check it?)
Your grounds have to be tied together, else the GPIO output has no reference to the NPN ground.
And a reminder about my final point, the P channel MOSFET may not be turning on fully with lower gate voltages. While it may start to conduct at -4V Vgs, your 6V supply may not be enough to turn it on fully. AT colder temperatures, this may be a small factor, though I tend to agree it is more likely something around the PIC circuit itself...
Another test is to turn off the MCLR (reset) in the config and see is that clears it up. That will determine if there is some fault (power or noise) that is triggering the reset. ie:
config _EC_OSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF & _CP_OFF & _CPD_OFF
EC = external clock source on pin 2
WDTE = watchdog timer OFF
PWRTE = power up timer ON (a few ms delay at power up - allows other things to stabalize like external clock source)
MCLRE = reset OFF as a test, put it back ON if there is no difference after testing so you can reset the PIC
BODEN = Brown out detection OFF
CP, etc are code protection bits = OFF