The rapid spinning wasn't consistent, which is strange, sometimes it was slower moving then it would move really fast. It could be in the Look function. In your Look function, you are rotating the X on transform.rotation, but rating the Y on camera.transform.localRotation.
Shouldn't you be rotating the camera on both X and Y in the same way? I'm assuming this code is on your player, so you are rotating the player on X but the camera on Y?