My current favorite implementation is on the STM32F7 and H7 parts. Most of the work is done by the peripheral and it’s very robust with few quirks common to other implementations.
Yes, they FINALLY spent the (rather manageable) effort to actually
design the I2C peripheral they are advertising. With the F7/H7 families, it also became
actually possible to use DMA for I2C.
Earlier STM32 MCUs claim to have "I2C" but what it really is, is just a stupid generator of a few simple IO patterns needed to implement I2C, but you still need to do half of the hard work in software. Now create start condition! Is start condition produced? Now clock bits! Are the bits out? Now create stop condition! A single transaction required many interrupts close to each other, and oh boy the possible number of different fault conditions, I remember spending a whole week if not more to write reliable I2C communication in STM32F2 series.
Many MCUs are/were similar. Lazy MCU peripheral designers, nothing else.
Also the recovery sequence sucks, and the fact that even that isn't necessarily enough. I have heard about designers who simply routinely add a high-side power switch on every I2C IC so they can reset them and retry communication.
Now, of course it is also possible to colossally fail an SPI slave device so that it does not reset the communication state on high level of nCS. It's just that I have never seen or heard about one. It's quite easy to get right.