I remember feeling like I had done fairly well, sans one interview. The interview in question was around development experience in C. The interviewer, very early on, asked how to redirect stdout. I suggested using freopen, and he said that wasn't allowed.
Well why the hell not?
The answer he was actually looking for depended on the knowledge that open() returns the smallest possible file descriptor number -- so close stdout, and simply call open() again.
I didn't happen to know that particular detail at the time. It derailed the entire interview. He was fixated on this one very specific piece of knowledge. And the worst part is not only does his approach make your code less clear, there are also contexts under which it wouldn't work.
I don't know if that particular interview was the reason for my not being offered a job.
I did end up hearing later on about hiring from a couple of Google engineers at a tech conference. They said that it is quite common that Google makes you interview two or three times.
I suspect the reason is to make you feel a sense of gratitude for being hired. And so you don't quit.