Thanks for your ideas Brian,
It looks like you're doing something quite different to what I intended. I need the foreign keys (film in scene and director in films) to make relationships, so they're not redundant. By providing the foreign keys explicitly, the relationships aren't inferred by their position in the hashref (which works with <3 levels), which would be fine, but I have to use the keys of the parent object, or the relationship doesn't exist.
By the way, the strange data and relationship names are inspired by the cascading-delete unit test for DBIC: t/cdbi/23-cascade.t.