Did you try to do instruction-level single-step execution over the last lines of jump_to ? You should especially check that the value in SysMemBootJump is odd (as this is Thumb code, this should be OK) and that you are currently using the MSP stack pointer (check the CONTROL register: it must be 0).
Also at which exact instruction does it crash? and does it just jump in some infinite empty loop (meaning you hit some exception) or does is locks up?
Currently I don’t have any way to test your code but it looks reasonable.
Hope this helps,