The reason for this is mostly historical.
In the past, the closing system was a lot simpler, and the duplicate close reason was treated internally in pretty much the same way as other close reasons, with just a different name and reason text. Back then, every close reason had to fit in the following form, and no extra features such as a banner with links could be added:
closed as [insert reason here] by [insert close voters here]
[insert static reason explanation here]
In fact, the banner for duplicate closures used to look something like this:
closed as exact duplicate by OneUser, TwoUsers, ThreeUsers, FourUsers, FiveUsers
This question covers exactly the same ground as earlier questions on this topic; its answers may be merged with another identical question.
Asides aside, to supply the duplicate link with this very simple architecture, which only added this one notice with a reason name and (static, non-modifiable) explanation text, they had to fudge it in somehow: until February 2013, the duplicate link was edited into the question body by the Community user (example of such a question). There were two places to put the duplicate link: at the top, or at the bottom. I'm guessing the edit didn't look good at the bottom, so it was put at the top.
In February 2013, big changes were made to the duplicate close reason, as part of a broader rework of close reasons (among other things, adding "duplicate" instead of "closed" to the titles of questions closed as duplicates, and the five-day "on hold" period for non-duplicate closures). One of those changes was to replace the Community edit with the automatic box you see today.
While the team could have implemented the duplicate link as part of the notice instead of a separate box because of the big modifications then, it would have made things fragmented between newer closures (with the link in the notice below) and older ones (with the link at the top of the post body). Also, while they could have implemented a script to automatically remove the old notices and replace them with the new form, this would have taken up more time and resources, and there are too many edge cases (what if someone edited the duplicate links later?). Also, if there were to be a bug in the script, it would have created an outright mess that would take a long time to resolve.
In summary, the link is where it is, because of backward compatibility with the old system. If the system were being designed today, there would have likely been a different architecture for closures, and the link would have most likely been in the notice below.
There exists another request on Meta Stack Overflow to make the duplicate part of the close notice, and not a separate link at the top.
Just a quick note: I'd highly recommend that users not reopen and close questions with the old notice, so they show the new notice. This wipes out the original close voters and original close date from the notice shown, bumps those old posts (with the reopening), and has no overall marginal benefit.