2. select now()::timestamp with time zone at time zone 'America/Denver';
2023-02-19 14:52:12.5383
3. select now()::timestamp with time zone at time zone 'UTC-7';
2023-02-20 04:52:12.538804
In America/Denver, UTC-7 is using as time zone that is why 1st and 2nd queries confirm each other, but 3rd query completely disapproves first two queries. Instead of '2023-02-19 14:52:12.538804', it shows '2023-02-20 04:52:12.538804'.
Unfortunately the actual +/- direction convention in use here is not the one you are expecting. It is defined to be the reverse of what you've said, and so you get the observed behavior.