Actually with the two files combined and that one line removed from the middle, AVRStudio handles the programming very gracefully, in that it does it correctly and without complaining. That line must just be the hex for ‘nothing more to see here.’ I’ll look more into making AVRStudio generate combined hex files itself, but not erasing the entire chip before I program it is actually a better solution for me. I don’t want to erase the bootloader when I SPI program, but I also don’t want the bootloader included in the hex file I will later try to upload to the bootloader…
The hardware problems were just some unexpected behavior (i.e. bootload failures) before related to the fact that I jumped from my code to the bootloader with lots of clocks still running and lots of interrupts enabled (particularly the USART_RX vector!). For a while my quick fix was to just disable global interrupts before the jump, since your bootloader code doesn’t use any, which worked, but wasn’t as technically correct a solution. Remote true-resetting is a lot cleaner, and lets me run things like startup sensor calibration routines without actually hitting a button on the helicopter, which is good because the sensors I want to calibrate are accelerometers and gyroscopes!
-Adam