Edit 1: Answering a comment
Edit 2: Commenting on the update to the question:
// Set the RTC Time to 5:10:30 Nov 3 2020 RTC.adjust(DateTime(2020,11,3,5,10,30));
Correct.
// Set Arduino Time Library different than RTC time 9:27:05 setTime(9, 27, 05, 14, 07, 2015);
Correct. Date is 2015-07-14.
// Setting Time Library to RTC time DateTime now = RTC.now(); tm.Hour = now.hour(); tm.Minute = now.minute(); tm.Second = now.second();
No. This is only partially initializing the tm variable. It has no
effect on the idea the Time library has of the current time. Note that
the date fields of tm have not been initialized at this point, and
could well be invalid (like month 23, day 125).
setSyncProvider(RTC.now);
This is incorrect, and should have generated a compiler warning.
setSyncProvider() expects a function that returns the current time as
Unix time (a simple integer, of type time_t). You are providing a
function that returns the current time in broken down form (year,
month...), with type DateTime. The Time library will not understand
that and may yield garbage like, say, 18:00:00.
The time returned by RTC.now() can be converted to Unix time with the
unixtime() method. That's why I gave you the time_provider()
function.
Also, you are not supposed to call setSyncProvider() and
setSyncInterval() on every loop iteration. Do it once and for all in
setup().
// Time Library time updates to RTC every 5 seconds tm.Hour = hour(); tm.Minute = minute(); tm.Second = second();
Again, this is only updating the variable tm. It has no effect on what
the Time library believes is the current time.