always reintegrate before release. You then get a chance to test and find your bugs, and if there are any, you can either fix them on trunk, or create a new branch to fix the bugs before reintegrating them and repeating the release procedure all over again.
This is the way you should do it - its repeatable, and you know exactly where you are at each step of the way. You can always reproduce what you have, easily.
Merging the branch after release means you have released 'beta' code. If you ever want to revert to the released software some point in the future, you will find it difficult to get an exact copy.
You will never get the QAd version different from the release version - as the QA team will only ever work with the version that you've delivered to them, ie the one you've just merged into trunk.