In this particular case, I think a better solution than just logging if something failed would be to not delete those and also not flag something as being moved to R2 if it didn't work for whatever reason.
Internally the system monitors Cloudflare's side and will retry a transfer if Cloudflare returns a 5xx error (5xx is an error on their end). However if something on the server-side (WordPress side) causes a failure it wouldn't retry since there's no real way to monitor if something happened on that end since the upload is part of that side.
I think a better solution would be to do a double check that the file landed in R2 properly (read it back after it's uploaded) to make sure it's there. That should work around any issue (Cloudflare's side or server-side) because we would only flag it as being moved if we are able to first read it from where it's supposed to be. So rather than ending up with potentially broken images that someone needs to go through an error log to locate, someone would end up with media that is still local that they could simply try again.