I guess my question is, is there a normal use case where the code needs to be changed for a release after the 'tag' is made? If all the changes are getting committed before the release tag is made, then what is the problem?
The changes that need to be made are committed to the trunk (or the maintenance branch), which gets tagged when they are all made. If unrelated changed are made to the trunk, it can't be tagged anymore, hence the trunk must be frozen.
Please study the commit logs in detail if its still not clear.