Há várias. As mais imediatas são que C# é uma linguagem de alto nível enquanto C++ é de baixo nível. Ambas são poderosas e possuem objetivos diferentes. Por exemplo, C++ se direciona mais para assuntos que têm relação com memória, drivers de dispositivo, sistemas operacionais etc. C# tem relação com melhorias de produtividade tanto na para o desenvolvimento quanto para o funcionamento.