We can only speculate on the causes, but the consensus seems to be:
- If all applications are managed code (and exposed via an abstract interface), then Microsoft and the OEMs can change any aspect of the implementation (such as CPU architecture, device capabilities, etc) without causing any programs to break. Think of this as taking the concept of ensuring future backwards compatibility to the extreme. Innovative and high-perf applications be damned.
- Pure/managed code can be verified at runtime. This has the benefit of proving that a program does (or does not) use an undocumented API feature, which is something Apple had a problem with recently in trying to prevent developers from writing tethering programs.
Anyway, back to your program problem:
Most C++ code is directly portable to C# (with major modifications, I'll grant you), so the problems you're experiencing with different behaviour (such as echoing) means that your C# program is not correct. This cannot be a bug in the CLR, unless the echoing is introduced by the Managed sound API.