I have quite the same issue: Two requests triggered.
But in my case the first request is the Post (with data) as wanted which generates the file on the serverside and delivers Content-Disposition along with the filename.
Opera shows the download dialog.
Then a second request is triggered as a Get (without the Post data obviously) and garbage is downloaded since the server needs at least the originally posted data.
I tried replacing the whole download process by a blob, via adding and removing an "a" link on the fly but there the next Opera Touch appears: the download attribute containing the name of the file is ignored and I end up with files name "(1)", "(2)", etc. without an extension.
Since Opera seems to give a shit on bug reports I'm going to block users with OPT at all as I do with the old IE - on a site with a few 1000 daily users it's a shame but they will blame it on Opera.