Again I'm not sure about the the PIC architecture, but I know typical AVRs have a bootloader reserved memory which is customisable in size using fusebits. If the program memory starts at the wrong location or is the wrong size compared to the bootloader then it will fail. It's easier on the AVR since the bootloader is at the end of the memory not at the start but it could very well be that the code is jumping to the wrong starting memory address.
In any case nearly every bootloader I've worked with can be configured in various ways and you'll find one specific way that is needed to work.
|