We might want to see if we can devise a new example (or wait for Robins to break it ;-)) before expending a lot of effort on making the commute_xxx bits more precise.
Here is an example that can trigger the same assertion as in bug #17781 with HEAD. But I haven't got time to look into it, so not sure if it is the same issue.
select coalesce(ref_0.permissive, 'a') as c0 from (SELECT pol.polpermissive::text as permissive FROM pg_policy pol JOIN pg_class c ON c.oid = pol.polrelid LEFT JOIN pg_namespace n ON n.oid = c.relnamespace) as ref_0 right join pg_catalog.pg_amop as sample_0 on (true) where (select objsubid from pg_catalog.pg_shdepend) < 1;