Thanks for your suggestion. FCDIV is written with a single instruction which combines the values for the two fields, so no possibility of this happening.
I only write FCDIV once (the first time) decided by the current state of the DIVLD bit. Although now I realize this checking seems redundant because you can always refresh the register for those MCUs where multiple writes are allowed, while for the rest, the extra write is simply ignored.
After re-reading the docs (after many years because my library routines were considered stable), I guess there is no error indication for the case the command is not completed successfully, only for setup errors (FPVIOL, FACCERR). So, a successful completion of a Flash command does not mean success, only potential success.
So, we just need to hope that the internal timing for the ERASE/PROGRAM commands (timing for which we can't do much, other than lower the clock to prolong a bit the overall duration) is sufficient even as the chip ages. I'll try to lower the frequency to 150KHz and see if that completes the erase in a single operation (instead of the workaround for two consecutive ones). But even if this works for now, it's still a matter of time as the chip ages a bit more until eventually the command built-in duration will be slightly shorter than needed, again requiring double (or more) repetitions to get the total time to be enough.
Which means, the way I now understand it, the only real solution for knowing if a Flash command succeeded is to add code to verify each erase and program operation and, if the expected result isn't found, repeat the process, for up to a maximum number of times.
Additional comments / suggestions are welcome.