Which means that GetDestination is at the very least not a ShipClass. ;)
Considering the semantics, I'd say that you need GetSource().
But, a little search for App.ET_OBJECT_EXPLODING revealed this line in MissionLib.py:
pDyingObject = App.DamageableObject_Cast(pEvent.GetDestination())
If pDyingObject (pShip in your case) is not None, then do the following comparison:
if pShip.GetObjID() == pPlayerTarget.GetObjID():
On the other hand, in the missions they are all using App.ShipClass_Cast (and GetDestination).
So, before I confuse you even more, try a couple of times with different casts (work your way up from ShipClass, or lower, depending on your view on the class inheritance model).
In case you don't know what I'm talking about, DamageableObject is the super class of ShipClass (ShipClass inherits from DamageableObject).
It's also possible that the event isn't firing for the ship, but for the projectile.
Add a pObject.CallNextHandler(pEvent) at the bottom of the function (not in any of the if branches), or at the very top (I think it's easier, in this instance, to do it at the bottom, from a readability perspective).