Toutes les fonctions Windows fonctionnent en UTF-16 (ou ANSI mais c'est obsolète, sans déconner), et le framework .NET ne fait pas exception. Un char en C# (System.Char) est un caractère Unicode sur 16 bits (donc des fois il en faut 2 pour certains caractères particuliers), une chaîne (System.String) en .NET est une chaîne de caractères (System.Char) 16 bits. Tout en interne est toujours encodé en UTF-16LE (sur CPU intel au moins). Le seul endroit où tes données peuvent changer de format, et, traditionnellement, en changent, c'est lors du passage par un flux (fichier, mémoire, réseau, ... Et plus précisément, c'est fait par les classes dérivées de TextWriter ou BinaryWriter) qui va utiliser System.Text.Encoding pour convertir une chaîne en série d'octets, et utiliser par défaut System.Text.UTF8Encoding (souvent avec BOM, mais parfois sans, ça m'a surpris très récemment)
Je vois un moyen relativement simple de résoudre ton problème si c'est vraiment du .NET comme tu l'explique ^^
Normalement, tu peux héberger au sein de ton processus l'autre application (en gros, tu devrais créer un genre de lanceur/surcouche), et si tu as les autorisations de réflexion, tu peux bidouiller méchamment le fonctionnement interne de l'application (changer le comportement des composants, ou même les remplacer). En l'occurrence ce qui te pose problème doit avoir lieu au moment de la validation, donc tu peux par exemple détecter ça (en te déclarant receveur d'évènements là où il faut) et agir en conséquences. Pour le "agir en conséquences" par contre, ça dépend vraiment de comment l'application est codée en interne. Ça peut très bien être extrêmement complexe à réaliser, et donc pas du tout une bonne idée.
Quand à l'encodage inverse ANSI--[transfo UTF8->UTF16]-->UTF-16, ça n'a effectivement quasi aucune chance de fonctionner. Il y a des bits de redondance, aussi bien en UTF-8 qu'en UTF-16 (bon, UTF-16 est largement différent car ça dépend des "surrogate pairs", mais bref

), qui te permettent de savoir qu'un caractère est le début d'une séquence, et que le suivant fait bien partie de la séquence... En gros, seuls certains caractères "ASCII étendu" peuvent démarrer une séquence UTF-8, et seuls certains ("ASCII étendus" toujours) peuvent la continuer. Un caractère ASCII banal brise ta séquence, et il y a même quelques caractères interdits... bref ^^
(PS: désolé pour le cross, j'ai posté après
./22 
)