How does buffering in the MCP79410 RTC work?
The RTC has two sets of memory. One that it writes to when it's clock interrupt triggers, i.e. when its time to update the seconds/minutes/etc.

The second is the buffer. When you write the address you want to read, then initiate a i2c read command, it copies the first memory into the buffer.

Then it expects you to read as many of the time registers at the same time/single i2c transaction as you want. If you start between 0x00 and 0x1F, and you attempt another read, the automatic roll over to 0x00 happens, triggering another buffer event.


  
  When a read is initiated from the RTCC registers (addresses 0x00 to 0x1F)  
  During an RTCC register read operation, when the register address rolls over from 0x1F to 0x00  
  The timekeeping registers should be read in a single operation to utilize the on-board buffers and avoid rollover issues.
  


The point of the buffer is that you don't do:


  [Start][RTC(WriteAddress)][RegisterAddress]
  [Restart][RTC(ReadAddress)][Read 1 Byte]
  [Stop]
  [Start][RTC(WriteAddress)][RegisterAddress + 1]
  [Restart][RTC(ReadAddress)][Read 1 Byte]
  [Stop]
  [Start][RTC(ReadAddress)][Read 1 Byte]
  [Stop]


Instead you should be doing:


  [Start][RTC(WriteAddress)][RegisterAddress]
  [Restart][RTC(ReadAddress)][Read 7 Byte]
  [Stop]


In the second example, you just read all 7 Time and Date bytes, at the same time. One Buffer done, no worrying that the Seconds or Hour register will update while you are trying to read the entire Time. In the first example, you risk unbuffered (multi-buffered) reads that can result in getting 11:59:01 pm Feb 5th, when the real time is 11:59:01 pm Feb 4th, because it rolled over.

Reading single bytes, and stopping/restarting the bus is wasteful in bus transactions and in keeping accurate time.