You're not taking into account instances where the time passed is not just exact for one shot.
Let's assume you're allowed to shoot once every 10ms.
So VSync is enabled, your time between frames is 16.67ms. Using this approach, you're firing just once every 16.67ms. If one frame is slower, like 22ms, you're still only firing one shot, despite being able to fire two shots.
So in the end it's just another instance of
fix your timestep.
While this won't fix the time between shots, it would fix the number of shots:
while (this->cooldownTime >= SHOT_COOLDOWN) {
this->cooldownTime -= SHOT_COOLDOWN;
// do something
}