Поскольку generate-id с nodeset-ом в аргументе равнозначен generate-id(nodeset[1]), то вызов ключа для потомков items2 будет находить элементы из items2 только в том случае, если элементов с соответствующим src нет в items1 (document order и все такое), а поскольку они там есть, то мы имеем то, что имеем. В данном случае можно делать составной ключ — use="concat(ancestor::items/@name, '|', @src)" — это даст возможность использовать ключ в нужном контексте.