Upgrade Pihole Container Without Breaking It

This is not correct way to update container. You first need to delete old one (wait a bit to ROS delete its root dir) and create new one with same config, you cannot have 2 or more containers on same root-dir. I think ROS needs improvement for creating containers and not allow to create new one with same root dir and VETH interface (ok maybe shared VETH across containers can be used if containers with same interface doesn’t run at same time, but then starting container can be restricted if other container is already running) which already assigned to some other. I wrote container update script to automate this process, if you want that see here.
Also containers must have mounted directories if you want configuration (or other data) persistance after update, because monted dirs are not deleted with container and new container will run without loosing service configuration data, for Pi-hole here you can see for mounted volumes pointing to these directories (/etc/pihole and /etc/dnsmasq.d) where configuration is stored.
If you need Pi-hole DNS to be always avaiable while update is performing you can create 2 Pi-hole containers (with different root dir and mounts) and both VETH IP addresses set to DHCP network for DNS (like @dang21000 asked above) and update them one by one.
For Pi-hole configuration backup/restore you can use its Teleporter feature in GUI Settings section, you will not need to use this after each update if configuration dirs are mounted as mentioned above, but it’s good to have configuration backup if container storage gets corrupted and you need to create new instance on different disk or just if you want to revert some changes in Pi-hole config at some point.