Ok I've just started adding a simple object pooling system to my game, bullets, enemies and powerups are recycled using a simple arraylist of active objects and a stack of used ones.
And it was looking like I had it working until.. the enemies became unkillable once they were recycled.
Double-check everything about their state, before and after, using the inspector. A simple example of what can go wrong: if you have a death animation or make the enemy into a ragdoll, a script might turn on is-kinematic or deactivate the rigidbody or collider.
If you can get two enemies on screen, one resurrected, then pause your game and compare them in the inspector, hopefully you'll see what's different.
I mentioned the physics components a the top because it sounds like you already checked over your own state variables like health, but of course you should check everything.