I am using a FRDM-KL05Z with the KL05-SC package. That bootloader sample is very similar to application note AN4655. The procedure Command_Lanuch() in flash_FTFL.c is executed from flash and successfully executes SectorErase and ProgramLongWord commands. In the meantime i looked a little closer and verified that this fails:
a) when i turn off instruction cache before. Then the wait loop is executed 6 times before it fails. Apparently there is no clean error exit from the read collision, instead the debugger shows a reset. There may be a hardfault exception in between. BTW: The wait loop should in the sample should have a timeout counter.
b) when i insert more instructions into the wait loop to make it more than about 30 code words. According to the reference document the cache has 64 Bytes, a reasonable match.
My conclusion is that the method proposed in that bootloader sample is safe as long as there is a wait loop that fits into the instruction cache and interrupts are disabled. What i am missing now is the requirements for self-modifying code documented in the ARM manual DAI0321 and support for Kinetis flash protection.