Just a quick follow up....
The hang-up only seems to happen if there is any kind of corruption on the SDA line - anything which gives a "NACK".
We can work around this by ensuring we don't get NACKs on the SDA line, but surely the driver should be resilient enough to recover from a NACK on a particular I2C device?