Hi Alexis,
Thank you so much, this is the correct answer and now I got the bootloader to work correctly. Turns out I commented out the systick_timer in the bootloader by mistake and that caused it to be a direct boot.
A different but somewhat related question I have now is after putting my program in the bootloader, I noticed that the uart interrupt no longer work correctly.

I'm receiving nonsense on my UART0 communication port. I tested out with the example program in the SDK (frdmkl25z_driver_examples_uart_interrupt) and the same thing is happening. Any ideas what is causing this?
Edit: I forgot to include but if either JTAG or USB port is connected then the UART behaves correctly but if they are both disconnected then I run into this problem.
Best,
Huy