My original fix is only applied to when the device is initialized. It looks like your problem is occurring at some time later during a transaction.
If you are able to get a debugger, cost is $21.25 at mouser, you can check to see if the busy bit is set when the bus locks up. If that is true then you will need to create a more sophisticated way of reseting the I2C module make this work. You maybe able to hack something in at the start or stop call and have something spin on the busy bit and cause a reset if it takes too long.
If you do get the debugger and find this is the case I'm sure that would be interesting to Chris as well.