あー、そういうことなんですかね。
2つのボールに同じスクリプトを仕込んで消してます。
その衝突タイミングがずれてるのがダメということですか。

func _on_body_shape_entered(body_rid: RID, body: Node, body_shape_index: int, local_shape_index: int) -> void:
if body.is_in_group("ball"):
self.queue_free()