There is a design problem with the I2C bus. It can lock up if the master is reset during a transaction. When this happens the master is trying to start a cycle while the slaves assume they're in the middle of a cycle.
This may not be the cause of your problem, but by resetting the master you may be getting the system into this state.
I've known about this for years, and have found my I2C Reset code that says how you should reset the I2C bus prior to using it. You should send 9 clocks (to clear out any previous cycles) during I2C initialisation. In some cases you have to program the port pins as GPIOs and toggle SCL in software to do this.
Google "i2c bus lock up reset " finds:
http://forums.parallax.com/showthread.php?112299-I2C-reset-%28part-of-protocol-or-by-device-manufact...
I have had a only a bare handful of projects where under certain circumstances an I2C slave may "lockup" (generally by not releasing SCL if a lockup happens during clock stretching -- masters that do not timeout under these circumstances usually fall into their own endless loop as well because SCL never goes high). There are workarounds of course: polling SCL, bit-banging I2C routines to ensure that I2C transactions timeout while waiting for a slave to release a line, power cycling the slave, etc.
However, I came across this tidbit in a datasheet from Atmel (an I2C 32kbit SOIC EEPROM)
doc said...
After an interruption in protocol, power loss or system reset, any 2-
wire part can be reset by following these steps:
(a) Clock up to 9 cycles, (b) look for SDA high in each cycle while SCL is high and then
(c) create a start condition as SDA is high.
The following are usually similar.
http://www.microchip.com/forums/m45683.aspx
http://www.utasker.com/forum/index.php?topic=990.0;wap2
http://e2e.ti.com/support/dsp/tms320c6000_high_performance_dsps/f/115/t/49472.aspx
http://www.picaxeforum.co.uk/showthread.php?18654-Curing-a-locked-up-i2c-bus-after-hardware-reset-of...
Tom