I believe that for proper classification of questions, users should not be allowed to tag as they wish.
The only way not to allow users to use the tags they wish is to automatically restrict the tags being entered; differently, you are describing the situation we currently have, when an editor will remove the tags that are not necessary, or replace them with the correct tags.
I don't think there is a way to automatically restrict the tags users can use basing on the text of the question.
First, there are tags that apparently are similar, but refer to completely different topics (see views and drupal-views); if a question would be about the Drupal module, I don't know how the code would know that the allowed tag is drupal-views, and not views. The other problem I see is, for example, for questions that ask how to write code that is equivalent to the code written in a different language; if the code that restricts the allowed tags would be able to detect the programming language used, how could it know that I mean to ask the equivalent of that code in another programming language?
The most important problem I see, anyway, is that users would be forced to add extra words in the question just to be able to use some tags. For example, when I ask a question about Drupal, I tag it with drupal, but I don't repeat "I am using Drupal" in all the questions; once the question is tagged drupal, it's obvious the question is about Drupal.