Useful post, and the IPv6 diagnosis is the part most of these guides miss.
One thing to check in Step 1 though: the string you landed on uses the pooler's user with the direct connection's host. The shared pooler answers on aws-[INDEX]-[REGION].pooler.supabase.com, not db.[ref].supabase.co. And 6543 is transaction mode, which Supabase's connection guide puts outside pg_dump, under "migrations, pg_dump, backup and restore, or replication... single sessions and Postgres native commands". Session mode, 5432 on that pooler host, is the one it offers "when you connect from an IPv4-only network". Same fix you were reaching for, one port down.
Two for the restore post, from a drill we ran on 4 October: roles.sql stops on ALTER ROLE "supabase_admin" and on GRANT SET ON PARAMETER, and pg_cron jobs do not come back, because they are rows in cron.job the data dump skips. Written up at reeve.page/blog/how-to-restore-a-supabase-backup