I think it's become something of a chicken and egg problem. All the hard-core game developers moved up from assembly to C, then introduced bits of C++ in the late 90s. All the books and tutorials end up getting written in C++ (or C with classes...). APIs get written in C/C++. More people learn C++ because its what the game devs do, and it's harder to find resources on learning how to do it in any other language. It's usually possible to make a wrapper for C++ code in a managed language, but it's not easy, if somebody else hasn't made a good binding already.
Garbage-collection has a bad name for some reason in game-dev circles, which maybe makes sense if you're developing a fast-twitch action game or shooter - a GC pause might drop enough frames to matter there, but for most games, Java or C# should be fine.