I did find a scenario where this approach does run into trouble. That is, if the function/procedure is executed against the permanent table and then you go to run it against a temporary table. In that case, I do get the wrong answer, and I haven't yet figured out how to reset that without dropping the procedure and re-defining it. For my purposes, that is "good enough" -- I can promise not to run such procedures against the temporary table.
You may want to be explicit and refer to the table with schema like select * from public.table_name OR select * from pg_temp.table_name to avoid confusion caused by the default behavior of using the temp table if it exists.