Welcome to GPWiki, James! That sounds like a very interesting game idea!
The only problem is that only one of the two collision methods for an object are being called i.e. the enemy is exploding but by the time the player checks what's collided with it the enemy has already died and been rendered inactive.
I'm not sure how're you doing the loop, but supposing you have something like this:
private void CheckCollision()
for (int i = 0; i < gameObjects.Count; i++)
for (int j = i+1; j < gameObjects.Count; j++)
if (gameObjects[i].Status == ObjectStatus.Active && gameObjects[j].Status== ObjectStatus.Active)
Basically, call both collide methods whenever there's a collision, then both entities can decide what to do based on the collision. So checking for collisions doesn't happen with the respective entity's think method, but during the main loop of the game.