The errata workarounds works for me.
Usually, the problem is not the workaround, but when i2c module hangs, it do this in the middle of the actual data transmission. In addition of ic2 module hang, it causes I2C bus stuck somewhere in the middle of data transmision..
So, when you detect I2C module hang, you should reset module and generate I2C bus recovery sequence: 9 ...18 clocks, and stop bit.
I'm not sure if you can do this with I2C module enabled, so you can disable module, clear all fail bits in status register, switch SCK and SDA pins to GPIO mode, generate bus recovery seq., enable I2C module and start the transmission from the beginning as usually.