Container Image Promotion across environments in ECR/ECS
Although difficult to give a canonical answer, I think I understand your frustration. My opinion is  that you are focussing on promoting the wrong thing - the image.
I would start with the concept of &quot;Dev-Prod parity&quot; (or in your case, UAT/Prod parity). This concept says:

Keep development, staging, and production as similar as possible

The simplest way to do this is to use the same image in the two environments. The difference between them comes from the configuration and backing services. These are set at run time, not at build time - ie they are changed when you start the container not when you build it.
So, your process should look like:

Build the image, tag it with uat
UAT environment discovers new image, new image gets deployed
Run UAT against new deploy, they pass
tag that same image with latest
Prod discovers new image, gets deployed.

This process is extremely lightweight and you will have certainty in what is deployed.
TL;DR instead of promoting images and having to rebuild them, just shift the tag used in prod.