I tracked down the bug a bit more. I think it has to do with me reparenting the explosion Sprite. Let me explain a bit more. I have two RigidBody2Ds. One is a bullet and one is a ship. When a bullet hits a ship, I get the collision point and normal, and reparent the explosion sprite from the bullet to the ship so that the explosion 'sticks' to the ship. It looks and works great, except for this occassional bug.
Here is the relevant code when a bullet hits a ship: body is the ship, this code is in the bullet:
func _on_Bullet_body_entered(body):
var unique = str(Global.getUnique())
var node = $Explosion
node.get_parent().remove_child(node)
node.set_name("EXR"+unique)
body.add_child(node)
node.set_owner(body)
expl = body.get_node("EXR"+unique)
expl.show()
expl.get_node("AnimationPlayer").connect("animation_finished", self, "_on_ExplosionAnim_animation_finished")
expl.get_node('AnimationPlayer').play("explosion")