What does a reset of a PIC microcontroller via MCLR actually clear?
The reset states of all the registers are very well documented in the datasheet.  That tells you exactly what you can rely on being set a certain way versus unknown after a reset.  In general though, it is a good idea to explicitly set any special function register values that rely on.

Another problem might be bouncing on the reset line.  Look at the electrical spec for the minimum timing of a reset pulse.  You may be violating it, especially considering mechanical switches bounce and therefore can produce arbitrarily short pulses during the bounce period.

One way to deal with this is to have the switch short a cap to ground.  The line will go low quickly, but after that it will take some minimum time for the switch to be open before the cap voltage rises to the minimum possible high level of the reset pin.  If you do this, make sure to put a resistor between the cap (and the switch and its pullup) and MCLR.  That allows a programmer to still drive MCLR as it needs to.  Some PICs require fast rise times on MCLR during programming, which a cap directly on the pin prevents.