Microchip PIC - How to recover the context saved in interrups or disable the automatic saving of the context?
First, this is totally inappropriate to write in anything other than assembler.  Messing with parts of the system that the compiler thinks it is managing makes a mess.  Performing unnatural acts on the stack, which is necessary for a context switcher, qualifies for the above.

Second, do you really really want a preemptive tasking system?  I've done will over 100 PIC projects, and preemptive multitasking hasn't been the right answer yet on such small microcontrollers that perform dedicated functions.  Multitasking can be a useful abstraction, particularly when processing a asynchronously received communication stream.  However, on small resource-limited systems that perform a fixed function, cooperative multitasking is almost always a better choice.  It completely gets around the need for "critical sections" and other types of mutexes around shared data structures since task swaps only happen when you make them happen.

My cooperative task manager is available for free as part of the PIC development tools release at http://www.embedinc.com/pic/dload.htm.  Look for files with "task" in their name in the SOURCE > PIC directory within the software installation directory.

Third, if you are using timer 0 overflow to trigger the interrupt that will swap tasks, you'd better be using a decent size prescaler.  Otherwise, swapping tasks every 256 instructions will cause the processor to spend most of its time swapping tasks and little actually running tasks.  Note that since a PIC 18 has a fixed dedicated hardware call stack, you have to actually copy the existing stack data to a save area, then restore the new stack data from the next task's save area.  That takes cycles.