Intuitively, I want to say that there is a problem with the Master side in its interrupt service routine - assuming the I2C Master is running with interrupts.
If the Master isn't programmed to handle a specific interrupt flag that occurs then the Master will hang.
Here's some troubleshooting ideas for you:
1. Check out the I2C Bus Primer. It has plenty of authoritative information on the operation of the I2C bus.
2. Compare the waveforms they present there to the waveforms that you see on your I2C bus.
3. Do you get consistent START and STOP conditions on all of your bus transactions?
4. Are you handling all Slave side interrupts for START, STOP, Receive and Transmit conditions?
5. Are you handling all Master side interrupts for START, STOP, Receive and Transmit conditions?
6. Can you sanity check your Master code by using a bit bang I2C Master rather than an interrupt driven Master?
7. Are you using a logic analyzer that can interpret I2C thus visually showing you what is happening on the bus?