A random observation is that if this code was executed across midnight across months, then it is possible that the
three separate DateTime.Now calls might
not all return the
same date, and that Starttime might end up being the last day of the next month or the first day of the previous month.
Eg, say that the date is rolling from 31-Jul to 01-Aug, then you could conceivably end up with 31-Aug (wrong by 30 days) or 01-Jul (also wrong by 30 days, and in the wrong direction too, ie time going backwards). It gets even worse across the December-to-January midnight.
I agree that the probability of this happening is small.

But it is also non-zero. ? The fix is simple:
Dim TempNow As Long = DateTime.Now 'latch the current date and time so that it doesn't change in the middle of the next calculation
StartTime = DateUtils.SetDateAndTime(DateTime.GetYear(TempNow), DateTime.GetMonth(TempNow), DateTime.GetDayOfMonth(TempNow), 0, 0, 0)