utcnow() is working as it should, but you need to specify that local time is false in the timestamp_custom and while you’re at it, get in the habit of setting a default since it will be required next month.
{{ utcnow() | as_timestamp | timestamp_custom("%I:%M:%S %p %b/%d/%Y", False, "00:00:00 AM 1/1/01") }}
From the docs:
Filter
timestamp_custom(format_string, local_time=True, default)
converts an UNIX timestamp to its string representation based on a custom format, the use of a local timezone is default.
See Also: