Why use EventArgs.Empty instead of null?
I believe the reasoning behind the NOT NULL is that when passed as a parameter, it is not expected for the method to need to potentially handle a null reference exception.
If you pass null, and the method tries to do something with e it will get a null reference exception, with EventArgs.Empty it will not.
EventArgs.Empty
is an instance of the Null object pattern.
Basically, having an object representing "no value" to avoid checking for null when using it.