I think the S2219 C# diagnostic (“Runtime type checking should be simplified”) should not be reported when doing == null or != null comparisons if the target type overloads the == or != operators, as the operators may do some “special” checks for null (whether that’s a good idea or not is another discussion…).
For example, in the case of the Unity game engine, UnityEngine.Object overloads those operators, so when you compare with null it actually checks if the object was “destroyed” by the engine or not, instead of checking whether the actual reference is null. If we have, say, an instance to a UnityEngine.Object as an interface, and we want to check if the object was destroyed, we can do:
IWhatever instance = ...;
if (instance as UnityEngine.Object == null)
...
But that triggers the S2219 diagnostic. Doing this instead:
IWhatever instance = ...;
if (instance is not UnityEngine.Object)
...
Would not have the desired effect when instance is not null but the object was destroyed.