There is a mistake: the result of function "time-call" must be passed forward.
(defun gjg/time-call (time-call &rest args)
(message "Ohai %s" args)
(let ((start-time (float-time))
(result (apply time-call args)))
(message "Function call took %f seconds" (- (float-time) start-time))
Unfortunately, you're telling it to run the function at 04:00am today. Unless you evaluated that code between midnight and 4am, that's a target time in the past, and so Emacs runs it ASAP.
The run-at-time code knows this is a bit dumb:
;; Handle "11:23pm" and the like. Interpret it as meaning today
;; which admittedly is rather stupid if we ...