Okay, so I've made some progress, and may have determined the cause, I'm still checking it out now.
With regards to having the debugger disconnected: After the bootloader finished loading the program and restarts, nothing happens (program hangs), presumably because it has managed to hit a breakpoint? When the bootloader is connected, I can press resume and everything functions as expected.
> - loader has not disabled peripherals/interrupts that were used and this causes the application a problem the first time it runs
I don't think the interrupts were disabled in the original bootloader, although I did switch over all the components to polling mode.
> - application not handling the watchdog correctly (I have seen watchdog code that works out of reset but not after a bootloading phase - eg. Teensy Arduino code)
I'm not sure, I've disabled it, do you think it may have become re-enabled? However, before I try anything more I've managed to get it to reset without halting:
I tried flashing the binary (without starting a debugging session) for the bootloader application, then got the bootloader to install an example application that came with the serial bootloader, and it worked. After looking through the build settings for each application, I realized I had left semi-hosting enabled on the problem application :smileysilly:

At the moment I'm assuming this would be the cause of the problem, I will post again later if this is indeed the problem.