I believe the root issue here is the phrase "execution of this instruction results in..." in the source code. How exactly are you executing this instruction? I'm going to guess you are using "step-into" or "step-over".
These two MPLAB X commands are source file oriented, meaning they will use line-table information from the ELF file to "figure out" where the target address of the step-over or step-into command should end up. Given that the code in question here is compiler generated start-up code, there very likely is no line-table information (for this code segment) in the ELF file, and MPLAB X is... confused. So MPLAB will tell the simulator to single step until it ends up at an address that it can find in the line-table information (or it gives up after some large number of single steps.) This is what happens here.
Simplifying the last paragraph: If you step-into or step-over, at 0x0009, the simulator is going to end up executing more than one instruction.
The way to get around this "problem" is to use step-instruction instead. Unfortunately, step-instruction is not available on the MPLAB X toolbar or menu's by default. (Decision made by the same folks who decided it was time to get rid of the assembler. mr green:
) But you can get it on the toolbar, by right-clicking on the (debug) toolbar, selecting customize, finding step-instruction in the debug commands section, and dragging that button out onto the debug toolbar. (See attached screenshot of modified toolbar.)
Now if you instruction-step at 0x0009, you will see that the "BCF PCLATH, 0x4" instruction works as expected. Two more instruction-steps get you to 0x000B with the "GOTO 0x5D2" instruction. This becomes "GOTO 0xDD2" because of the current contents of the PCLATH register.
But there is no actual code at 0xDD2! At this point the application is out of control.
I am very interested in the idea that MPLAB 8.92 simulator executed this exact same sequence of instructions differently.