Basically, it is expected behavior for terminationGracePeriodSeconds, as it is optional duration in seconds the pod needs to terminate gracefully.
On pod termination - the lifecycle is described here - pod receives terminating state and it is removed from the endpoints list of all services and stops getting new traffic. SIGTERM signal is immediately sent to the processes running in pod, and Kubernetes is waiting for the pod to stop normally on its own
during the grace period specified in terminationGracePeriodSeconds option. As soon as terminationGracePeriodSeconds expires, the Pod is forcefully killed by SIGKILL signal. In your case, the processes in the pod were just shutdown normally before 120 seconds of grace period have passed.
In its turn, preStop hook is called immediately before a pod is terminated, which means that the hook will be executed prior to kubectl sends SIGTERM to the pod. As stated in documentation, the hook must complete before the TERM signal to stop the container is sent. terminationGracePeriodSeconds is happening in parallel with the preStop hook and the SIGTERM signal and its countdown begins before the preStop hook is executed. The pod will eventually terminate within the pod's termination grace period, regardless of the hook completion.
Therefore, on receiving sleep command for preStop hook, pod already marked as Terminating but the processes inside of it are not yet terminated - so the container can complete all the active requests during this period.