(but my OP was intended to be more about "what do i do when the basic debugger is not enough help? oh i wish i could have X")
Yes, understood and I concur. Embedded stuff is my hobby, I've been 40 years writing software on mainframes, minis and PCs, and the debugging tools on desktops rather spoil you when you try to do similar stuff with MPLAB X and a PICKit 3 (as do I).
The cost of something "better" like an ICD 3 or REAL ICE is a touch too much for a hobby, so I tend to fall back on the old methods I used before desktop debuggers were a thing - frequent function/module testing during development, extensive logging, etc. (which sometimes causes more problems, especially with time-critical code) - but also just toggling an spare output pin is a great help to trace the flow - I use different numbers of toggles to checkpoint sections of code and also use it for measuring function time to see if it meets expectations (often I've cocked up a timer setting or an interrupt priority or something and things run much slower than planned).
In your case, multiple nested interrupts and high risk of stack overflow gives you the worst of everything - those types of issues on desktops (i.e. multi-threaded, memory intensive tasks) are also difficult to debug because the cause is often far removed - in code lines and time - from the observed error. Having said that, most of the PICs I've used (8-bit and 32-bit) allow you to trap stack issues with a forced reset and a status register on restart that at least tells you it happened.