Bootloader jump to main application problem using STM32 with Keil Uvision
I had the same problem: I solved it with commented this lines:
__disable_irq();
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);

Some advice for anyone writing a bootloader for first time:
Turn your code into small sections:

In the first write a simple blinky code without any interrupt.
use of sector erase ability and and write your put your bootloader and application code together in flash. Now you just,must try to jump from bootloader in application code. If it works, this means your jumping is correct.
Now try receive your application code with USART (or with any other peripheral) and write in flash. It must work, if not, it means write it flash is wrong (open hex code file and compare flash data,flash address and other thing with hex file) (attention to little_endian writing)
Now write a blinky code with timer and interrupt. It must work, if not, it mean is mistake is in jumping vector table