You're assuming that the trunk is the most stable code - the production code. I was assuming that the trunk was the development code, and 1 or more branches contain the production code.
Stable branches seems to be more popular, and the advantages of them are as follows:
* You can have more than 1 stable branch.
* You don't have this situation where you need to merge development code back into the trunk, which for a brief moment then becomes unstable. What if someone needed to publish before you had done all your testing?
An alternative, I suppose, would be to get away from the whole trunk/branches/tags structure and change it to something like:
stable/2.0
development/2.1
releases/2.0.0
In other words, ditch "trunk", split branches into "stable" and "development" and rename "tags" to "releases".
In order to 'stabilise a branch' you would move it from development to stable. And any new version would start as a development branch.