It really depends on how rich and specific the tag architecture is. If there's less than ten tags you might consider just showing all of them as toggle buttons. If there's 100 an autocomplete entry is more sensible. If at all possible autosuggesting tags can be helpful, as Youtube provides. Then the problem is coming up with sensible suggestions.
In a text-based environment (say it's a blogging application) you can extrapolate that certain keywords that map to existing tags might be something the user wants to tag; a blog post titled "Obama promotes spending bill" would likely be tagged "politics" "USA" and or "Barack Obama" if such tags existed in your application.
Youtube doesn't have it so easy, as analyzing video for content is computationally complex and inaccurate. Instead youtube selects suggested tags based on what tags you have already applied; if you've tagged a video as "Cat" it might suggest "Pets" "Kitten" "Animals" and other tags often used in unison.
Tagging multiple items is a separate issue and usually requires a separate interface similar to Gmail's label system whereby you can select a number of items and tag them all at once. This makes sense in Gmail's situation, as you might have hundreds of emails in a day and a relatively small volume of tags, or more commonly categories.
This is different from an application like SE and Youtube as users are expected to tag as they post, not ex post facto as in an email application, and in addition the amount of content to tag is relatively small (one to a handful of questions/videos a day usually). Compared to that, manually tagging individual emails to high levels of semantic meaning could take longer than reading the email.