Your scheme seems to imply that one has two copies of the loader, in different flash blocks, and switches from one to the other. I didn't bother; I just loaded the loader into RAM and it does everything from there. Nice and simple. I posted various threads on RAM based loaders a year or two ago...
Remember the "do not turn power off or your motherboard bricks!!" BIOS updates from early 2000's? Those you applied by booting into DOS, then running the updater tool, fearing you will destroy your computer.
The rest of the world went on, for the last 15 or so years every firmware update has been brick-proof. Yes, two copies of the application is all you need. Erase and write one; after verification, mark that one bootable. If that fails, the other app is not touched. Flash is cheap. When was the last time you used more than 50% of the flash for the firmware itself? For me, it was over a decade ago, in a small cost-optimized application on ATTiny25, which used 80-90% of the flash (2K). After that, every project has been way below 50%, so could easily afford split into two apps. All you need is multi-page flash controller, which is also available in almost every MCU, weird budget models like STM32H750 aside.
And yes, you are not the only lazy one. I have went with super simple "flasher" code as well in a few projects in past. Just place the functions in RAM, erase and write. Very simple, but comes with window of death. I have minimized this risk by receiving the full firmware in RAM, so there is no communication to fail during flashing. But flash erase is still slow, someone can cut power during that. So we should really stop doing lazy bullshit solutions like this.
I remember seeing you having significant trouble with bootloaders. It's true this is more work, of course, but still ain't rocket science. My current project still uses the app itself to write the flash, but it writes the
other app. Bootloader checks which one has higher counter and valid CRC, and boots that. Still very simple.