The following pgTAP inconsistency led to a few wasted hours. Turns out that function_privs_are handles both upper- and lower-case input for its args parameter, whereas function_owner_is only handles the lower-case version. Case in point, given this function ...

create function my_func(text) returns text as
$$
begin
  return 'foo';
end
$$ language plpgsql;

... the first test passes, while the second one fails with the function [...] does not exist error!

select function_privs_are ( 'my_func', array['TEXT'], 'my_user', array['EXECUTE']); # passes
select function_owner_is  ( 'my_func', array['TEXT'], 'my_user'); # fails, needs array['text']

At first glance, it seems that the likely fix should be to lower() args in both _get_func_owner functions:

CREATE OR REPLACE FUNCTION _get_func_owner ( NAME, NAME[] )
RETURNS NAME AS $$
    SELECT owner
      FROM tap_funky
     WHERE name = $1
       AND args = lower(array_to_string($2, ','))
       AND is_visible
$$ LANGUAGE SQL;