The choice of which Unicode Encoding to use depends on several factors. Your application can use UTF-8, UTF-16 (UnicodeEncoding), UTF-32 or even UTF-7. Internally the .Net Framework strings are native UTF-16 strings.
UTF-7 is generally not used except for special cases where 7 bit compatibility is required.
UTF-8 allows encoding using 8 bit data sizes and usually works well with many existing systems. For the ASCII range of characters UTF-8 is identical and allows a broader set of characters. For CJK scripts however UTF-8 can require 3 bytes for each character, potentially causing larger data sizes than UTF-16. Sometimes the amount of ASCII data such as HTML tags mitigates the increase in size for the CJK range, providing a negligible net impact.
UTF-16 is often used natively, such as in the Microsoft.Net char type, the windows WCHAR and other common types. Most common Unicode code points also only take one UTF-16 code point (2 bytes). Unicode supplementary characters U+10000+ still require 2 UTF-16 surrogate code points.
UTF-32 is used when applications want to avoid the surrogate code point behavior of UTF-16 on systems where encoded space is less of a concern. Note that single "glyphs" rendered on a display could still be encoded with more than one UTF-32 characters. Also the supplementary characters susceptible to this behavior are currently much rarer than the Unicode BMP characters.
Personally I prefer UTF-16 data types internally and UTF-8 for data storage and transmission if the data size is important, such as for HTTP. For some scripts I may choose UTF-16 instead of UTF-8, however often times the number of ASCII control codes even in non-ASCII scripts allow for smaller file sizes in UTF-8 than UTF-16.
I only choose non-Unicode encodings if I must conform to a legacy protocol or standard that doesn't support Unicode.