DS1307 RTC Giving Wrong Values After Running for a Few Days

        if(tn9_pos == tn9_len && tn9_rawval[0] == 0x53){	// If sensor has sent junk packet...
            digitalWrite(tn9_action,LOW);	// Make sensor start sending data
        }

This is not a junk packet but an ECHO of data written to the TN9 to adjust 'Emissivity'. Not sure if this would have some bearing on you problem though. The TN9 datasheet also says 'Operating Range -10~50°C / 14~122°F' so maybe the RTC is fine but the TN9 is causing the problem. Maybe compiling with '#define INFRARED 0' and seeing if device fails after a few days will confirm this.