Arduino Uno Wire Transmission Issues
Wire.requestFrom(kClockAddress, 7); // request seven bytes of data


Just because you request 7 bytes doesn't necessarily mean you get them. I suggest before reading the date and time you set all those variables to something invalid (like 0xFF). Then after reading, if you get 0xFF in any of them, ignore the entire lot.




  we are sending a start bit again, when we never sent a stop bit previosuly. ... Does this sound reasonable


Not really, because I2C doesn't have start and stop bits, it has start condition and stop condition which are specific changes to SDA and SCL which don't happen at any other times. See I2C for a description. I would be checking the data for validity, as I said. There is no other way of knowing for sure that a transmission wasn't interrupted. If you request 7 bytes of data, the library tells you that you got 7, even if you did not. However if it cannot even find the target device, it returns 0 as the number of bytes (you aren't testing for that anyway).

The very least you should do is test for a valid connection, eg.

if (Wire.requestFrom(kClockAddress, 7) == 7)
  {
  // read the data
  }


That at least confirms that the clock chip responded in some way. Not checking error returns from function calls, where documented, is not wise.

Similarly when you send your command.

  Wire.endTransmission();


That should be:

if (Wire.endTransmission() != 0)
  {
  // handle error here
  return;
  }


You have no tests in your code for either the sending or receiving to be working. And then you are unconditionally using the resulting time values. That's like opening a file, and reading it, without checking if the file exists.