A CharString would only use a single byte (char) per character with a null terminator, and would be what is normally seen in C/C++. A UnicodeString uses 2 bytes (w_char) per character followed by 2 null bytes, and is less common in C/C++ but all strings in C# (Dot.Net) are in Unicode.
If you send a Unicode string that contains a first character that is encoded such that the 2nd byte is a 0 (like ANSI encoding. most common used in the USA) into TDE using the Type.Type_CharString then it will see the 2nd byte as the null terminator and stop, giving you just a single character in the TDE content.
So it is most fortunate that UnicodeString is supported by TDE because converting Unicode to single byte per character "strings" would have been a pain, and possibly disastrous in a localized app. So, unless you are using some very unusual code in your C#, I suspect you should be using Type.Type_UnicodeString to get the desired value into the TDE content.