How do I use "OLD" or "NEW" in a dynamic SQL statement in an on-update trigger?
After a lot of trial and error I've finally figured it out. The trick was the notation for composite data types (and more importantly their usage) which eventually led me to this:

CREATE OR REPLACE FUNCTION versioned_update()
RETURNS TRIGGER AS $$
DECLARE
     sql TEXT;
BEGIN
    sql := 'INSERT INTO backup_table VALUES $1.*';
    EXECUTE sql USING OLD;
END;
$$ language 'plpgsql';