Dates are always stored in the database as UTC. That’s just how the database works. You can set the timezone that you are connecting to the database with, and then they’ll be read back as being in that timezone instead, with any required adjustments. And if you write a date with a different timezone into the database, it’ll convert it to UTC before saving it.
What’s presumably happening here is that you are connecting with UTC. The date in the database is 01:37 UTC. You read that and change the timezone, getting 20:37, so that’s what is displayed in the form. Note that the form doesn’t include anything about a timezone, just the numbers.
Now, you submit the form, which has 20:37 as the time, to the edit function. It starts by reading the old data, and once again it’s back to 01:37 UTC, because the database hasn’t been changed yet. Without changing the timezone of that data, you patch it with 20:37. So, now it’s 20:37 UTC, which you save to the database.
Does that make sense?
If you’re always using the same time zone, you can set that in your app.php. If not, you’ll presumably want to set the timezone on the data right away after reading it, before patching. Just move the existing call to do that up, from between your debug #1 and 2, to right after the get call.