The general criterion I would think is this:
Does having this question remain open add anything that's not already covered by the other question?
It's possible to have countless minor variations on essentially the same question, and arguments could be made that they are in fact different questions, but are they really? If the original question contains information in it's answers that also answers the new question, then - IMO - it's a clear case of "close as duplicate".
The point I'm making here is that if question A was "what's 2+2?" and question B was "what's 2+3?", yes they are different questions which do have different answers, but if question A was answered in a way that explained how addition worked, then question B is clearly a duplicate.
This all depends on perspective. For me, close as duplicate is not a slap-down and it's not harsh moderation. It's actually something very different to those - it's actually a valid way of providing an answer to a question. So when I vote to close as duplicate, I'm most definitely not saying "you stupid person, that's been asked before, ha ha"; what I am saying is "here, read this other question, it contains the answer you're looking for".
So although it might not seem so on the surface, closing as a duplicate is really just another tool to help someone find the answer they want. That's a key distinction, and maybe it needs to come across more clearly in the stock text used for closing duplicates.