Well, yes and no. IIRC, the official implementation was closed indeed, but it was standardized from an early age and all blocking patents were released under some "community promise". So it was an open language with a closed implementation. I think Java was a closed language at the time, not even sure if an open implementation existed. There was some shared source reference implementation of .NET ("SSCLR" or something), but the license was bad.
Originally Microsoft implemented all of Java and then some. Delegates for example appeared first on Microsoft's Java, which was against the licence Sun offered (they wanted a more centralized development where they agree on certain features and get them standardized first). They literally tried to do the embrace-extend part, but Sun's lawsuit came before the third step. Still Sun fucked it up by themselves by stagnating the language for years (although not so much JVM as a platform, thus why tons of alternative languages have sprouted from it).
What changed? Why is C# or JITs (or for whatever reason Java and C# were hated) acceptable, now?
Because it isnt like they coded a VM once back in 1992 and set it in stone. Java wasn't even JIT'd when it started, that came later with HotSpot. VMs have advanced a *lot* in the last 20 years. HotSpot in particular has tons of nifty profile guided optimizations that does on the fly (branch prunning and reordering, "devirtualization" of method calls, escape analysis, etc).
Microsoft's VM isnt as sophisticated, but it was better designed from the get go, so you got less overhead with native interop, easy marshaling between native and managed memory, finer control of the memory layout of your objects via structs and arrays of structs, etc. ie, most of the tools you need to get more performance out of your code.
Google's V8 can get quite nice speed out of JS in record time since its been based on the goal of fast loading websites (afaik JS VMs do cool stuff like optimistic typing to try to get around JS's limited type system).
Not only hardware is faster but VMs are much better at what they do nowadays. Nevermind that the tooling and environment is really great (for both C# and Java you got great IDEs, great libraries, great debugging tools, great profiling tools, etc).