I'd like to advocate a more flexible policy for closing duplicates. As is, duplicate and near-duplicate questions seem to be closed as a hard rule. Of course, we don't want the same question repeated over and over. But if the new question is much better than the old one, closing it is a needless loss in quality for the site. I'd like for the duplicate policy to be more flexible, and allow a repeat of a question if the new one is significantly better than the old.
A weird situation comes up when a well-posed question is upvoted, starts getting quality answers, and then is suddenly closed because someone discovers an old link to a similar question. Is this really serving the community interest? It's sad when someone posts a well thought-out, exactly-specified, test-cased question, and it's closed because the same challenge was posed in a question from 2011 with an ambiguous two-sentence spec and only a few mediocre answers.
With the current policy on duplicates, that challenge can never be posed again. Anyone who was not on the site at the time misses out on that topic forever. A good question that was ruined by an loophole never gets a second chance.
At this point, someone is sure to object, "But you can just answer the old question or edit it to improve it!" I think that this is a romantic view that it's simply not realistic.
If you answer a question from many years ago, chance are barely anyone will see it. You might as well submit it to dev/null. Likewise for edits to improve an old challenge. Yes, there are some old questions that pop up perennially, but in most cases, that question and your answer or edits will fall off the front page and be forgotten. It'a vicious cycle in that even those who see it and are tempted to participating don't so as not to risk investing time in something that nobody is likely to see.
A new question is like a community agreement to focus attention on that challenge. The fun of the site is golfing/coding with other people -- commenting, upvoting, making improvements. It's a social experience. Why do people post answers rather than just leaving the code they wrote on their computer? That's the same reason answering or editing an old question just isn't the same.
Moreover, old questions are often not up to the quality standards of modern ones. Submitting an answer to an ambiguous or flawed spec is unsatisfying. Editing an old spec to be more precise or close loopholes is unfair to existing answers. Adding a bounty doesn't get fix this either.
If there were another mechanism to resurrect old questions and improve them, with a social agreement to focus on that question for a time, I'd be all for it. But as is, if someone does the service of making a better version of an old question, intentionally or not, I think we should not throw away effort that by closing it as a duplicate.
(I also want to endorse this post by Ryan as to the lack of harm of closing duplicates.)