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".
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".
That's a key distinction, and maybe it needs to come across more clearly in the stock text used for closing duplicates. I think the problem is that the stock text is too cold, too formal, it's focussed on the question more than on the answer, and may even be read as slightly accusatory by the person asking a duplicate question. Rephrasing the text around helping the person solve the problem that led to them asking a duplicate might be better (and yes, I know a link is provided, but I'm talking about the text here).