I googled "== null vs is null" and this was the first result
c# - What is the difference between "x is null" and "x == null"? - Stack Overflow
There are many more results if you search yourself.
The main issue seems to be that you can overload "==" to change its behaviour so when you use "== null" you have no guarantee what code is actually being called and how "== null" is being defined. For example if I have a Person class I could overload == for Person to say that if the person has no ID then it is null. When your code uses "if (p == null)" the result might be "true" despite the variable "p" not actually being a null reference.
However when you use "is" that can't be overloaded so checking "is null" gives a more accurate view of if the variable is a null reference or not.