Pavel,
It turns out that my problem was that a "hard fault" was occurring at reset because I was accessing 32-bit data that was not aligned.
After adding the appropriate attributes to the structure typedefs as shown below, and with a little cleanup, my reset issues went away.
typedef struct __attribute__((packed,aligned(4)))
{
} MYSTRUCT;
I realize that normally, packing a structure is not required. But the last two bytes of each structure that I keep a copy of in flash contains a CRC that I use to verify that the data is valid or not and I use the same functions to update that and to check it for all structures. My functions that do that require the very last two bytes of the structures to contain the CRC.
I want to be able to debug my application code without the bootloader in place, so when doing that, it appears that I will need to add the stack pointer and the jump to my start code at 0x8000000, as you pointed out.
Thank you!