The STR91x.s file in the Blinky-B0B1 example is a good start in getting bank switching working for in-application-programming. But there is a change I had to make in order to restart (jump to 0) a bank of code.
In STR91x.s, if Bank1 is the boot bank, the code sets stuff (wait states, etc) in the flash configuration register by writing to a Bank1 address. This works fine when this code gets executed from powerup/reset but not if this code is restarted by jumping to 0. In this case, the wait state setting is no longer the default and a prefetch abort occurs when writing to the Bank1 address. The write can be done ok executing from RAM so that is what I did to fix it. I removed the flash-config-setting code from STR91x.s and did this in another file, assigned to IRAM1.