I think what you might have done is to .hide() the visible parts. Or maybe remove the skin of the blocks when they get hit?
Try .queue_free() on instead.
If that doesn't work, maybe try to .queue_free() the collision box, then the visual part
I'm using queue_free() but the issue comes from where I use it.
Walls are RigidBody2D with Polygon2D and CollisionPolygon2D inside.
Currently when walls are fractured I use queue_free() on the polygon (that gets split into fragments). Simply using get_parent().queue_free() solves the issue (because whole wall including CollisionPolygon2D gets removed).