It was a great 2 weeks of work - other than immutable lists (joking) everything looks so elegant.
600 lines of CYPHER (which dwarfs the 8 lines for a query) and I've manage to reach my outcome.
Why so complex ? I need to keep the leaves shared between 2 tenants, whilst nothing else in a branch can be shared. As the graph is built from bottom to top, it needs to find out if that path pre-existed in the current tenant and replace the 'proposed' ids from the params with the pre-existing ones, and repeat upwards.