Well it looks like I'm not the only person with problems.
What I don't understand is why the following hangs -
while ( !Wire.available() ) ;
ret = Wire.read();
This does not hang, however does not always return the correct data
//while( !Wire.available() ) ;
ret = Wire.read();
I'm not good enough with GitHub to compare the spark_wiring_i2c.cpp today vs a month ago.