4.5V is the absolute minimum that the DS1307 will run on, however should your supply dip by a smidge for any reason, the rtc chip will get upset...
I see from your code that you are reading it one byte at a time, I have to assume that you handle the Not-ack, start/stop etc properly before and after calling this code to get as many data bytes as you require.
However, like I said earlier, make sure you read the rtc chip, then display the results in that order, from the same routine. For example, don't try to update the lcd in your main code, and read the rtc in an interrupt service routine.
Do it all in one place, something like this...
*initialisation*
set timer for 1 sec period
clr timer
clr old timer flag
enable interrupt for timer
*main code*
blah blah blah
*interrupt service routine*
disable timer interrupt
clr timer interrupt flag
context saving
read rtc chip
convert results to ascii
set lcd position
send ascii to lcd
context restore
re-enable timer interrupt
return from service routine
or if you are polling the code...
*Main code*
blah blah blah
jmp update_time
*update_time*
read rtc chip
convert results to ascii
set lcd position
send ascii to lcd
jmp main code
keep going, we'll get it sorted out in the end