Die beiden casts haben schon unterschiedliche Verhaltensweisen. Falls das Objekt aber wirklich von dem Typen ist, passiert das gleiche. Der Unterschied kommt im Fehlerfall:
(xyz as Button) liefert null zurück,
(Button)xyz wirft eine InvalidCastException.
Wenn du dir sicher bist, dass der Cast immer stimmt, kannst du ruhig beide hernehmen, das nimmt sich dann nichts.
Was die beiden Parameter angibt: Der eine ist der "Absender", beantwortet also ggf. die Frage "Wo hat sich was getan? / Welcher Button war's denn jetzt?"
Der zweite Parameter übermittelt genauere Informationen, WAS sich getan hat. das ist bei einem Klick noch relativ trivial, aber z.B. bei einem Tastendruck findest du hier die Info, welche Taste gedrückt wurde. Bei einem Mausradereignis findest du hier Informationen, in welche Richtung das Mausrad gedreht wurde.