To check your bit shiftage, I stuck this at the bottom of my sketch:
Serial.print("\ntime: ");
rtc = ((uint32_t)data[1]); //LSB
rtc |= ((uint32_t)data[2]) << 8;
rtc |= ((uint32_t)data[3]) << 16;
rtc |= ((uint32_t)data[4]) << 24; //MSB
Serial.print(rtc, DEC);
Serial.println();
And it works great! Thanks for that bit- I'm used to thinking in Smalltalk or Ruby, not bits and bytes- the math I would've written to converted those four bytes into seconds would've been total mess.