Mono's behavior is intentional. By the time PlatformID.MacOSX was introduced in .NET 2.0 SP2, too much code depended on the existing behavior. For more info, see:
https://bugzilla.xamarin.com/show_bug.cgi?id=13345
https://bugzilla.novell.com/show_bug.cgi?id=433108

The most reliable way I know of is to [P/Invoke uname and check for "Darwin"](https://github.com/mono/monodevelop/blob/master/main/src/core/MonoDevelop.Core/MonoDevelop.Core/Platform.cs#L61).