While this has been resolved now, I did breadboard up a device to check this for myself before the explanation came through.
Once I'd recreated the scenario, I dropped straight into the dissasembled version, watched TMR0, and sure enough there it was. Light bulb in head thinks 'buffered register', checked the data sheet, yes, high byte is buffered. Time taken once the problem was recreated was under a minute.
This probably shows the value of at least a little assembly knowledge. While you don't need to be able to write it, just stepping through it will often give you, or at least point you to the answer.
One further point, I just checked it with the MPLAB simulator on MPLAB 8.92 or MPLAB X 3.05 the problem does not occur. While the simiulator has its place, apart from a few isolated use cases it has limited value IMHO.
While there is of course value in "reading the data sheet" and the errata, it is not uncommon for these kinds of intricacies to be forgotten. Right now I have seven projects on the go using different PICs, and it's pretty much humanly impossible to remember exactly all these little nuances.
But yes, irrespective, CCP is the right peripheral for this.