Generally yes. Mono can be split into three parts. First, there are the parts that implement the ISO/EMCA standards for C#, the runtime, and the libraries.

Second, there are additional libraries that are in .NET for doing various non-portable things on Windows (like writing Windows GUIs), for which Mono has made compatible libraries for non-Windows.

Third, there are additional non-Windows things Mono has added. Some of these are new language features from versions of .NET that haven't yet went through ISO/ECMA. Others are things that Mono has added that don't have anything corresponding in .NET.

For items in the first part, Microsoft had to make any IP of theirs known to be necessary to implement the standard available on reasonable terms. The terms they used are the Microsoft Community Promise.

For items in the second part, there may be some risk. The simplest thing to do is avoid those parts. For example if you want to write a program that needs to be portable to Windows, Mac, and Linux then instead of using the Windows-specific GUI stuff and Mono's compatible versions of those, use Mono's GTK#. That works on Windows. If you aren't trying to write a portable program, then there is even less reason to consider the Windows-specific stuff and its Mono equivalents.

For items in the third part the risk seems low. Mono isn't using Microsoft code for the most part (and any Microsoft code they are using was released by Microsoft under the Apache 2 license which includes a strong IP grant), so copyright isn't going to be a problem. The potential problem would be patents. However most of the things in the third part are things that are also done in many other languages/runtimes and so any patents on the .NET versions are likely covering specific implementation details. There's no particular reason to believe that Mono's independent implementation would have used the same methods. In other words, for these things the risk that Microsoft would go after Mono is about the same as the risk that Microsoft would go after Java, or Perl, or Ruby, or Python for how those languages and runtimes do similar things.

Actually, that's not quite right--the risk is probably lower, because Microsoft has provided encouragement for Mono. That's going to raise some estoppel arguments. They'd have less of a problem going after some other language where they might not have as many estoppel issues to deal with.

Really, though, the big difference between Microsoft and Oracle here is attitude. Microsoft had encouraged independent and open source work on .NET. They've released quite a bit of their code under the Apache 2 license, including the .NET Micro Framework. The Apache 2 license has a strong patent grant.

Sun/Oracle on the other hand have been reluctant to allow truly independent implementations of Java. They will not place the spec under control of a standards body. You can't get a patent license for an independent implementation unless you pass the TCK, and you can't get a license to the TCK under acceptable open source terms.

Sun did release OpenJDK, but it is GPLv2. No explicit patent grant. There is probably an implicit patent grant but no one knows what the boundaries are, so the practical effect is that OpenJDK is likely to just track closely Oracle Java. I doubt you'll see any major effort to fork OpenJDK and add Java ME support for instance.

A good illustration of the attitude difference can be seen with F#. The F# compiler did not initially work under Mono. Microsoft could have ignored that, opting to keep F# as a reason to encourage people to go with Windows and Microsoft's developer tools, and leave it to the Mono people to enhance Mono to be able to handle F#. Instead, Microsoft quickly updated F# to make the compiler work on Mono.

If some Oracle thing didn't work on a non-Oracle JVM, I would be surprised if Oracle would leap in to make it work unless some big customer with a lot of money wanted it.