From there, the diagnosis is that the 'shelve' implementation is incomplete: it assumes that shelving a set of changes will produce no conflicts which is not the case here.
Shelving the 'beans -> spam' rename means 'spam' should be restored which conflicts with the unversioned 'spam' that has been added after the rename.
I added the provided reproducing recipe as a blackbox test in lp:~vila/bzr/660125-shelve-rename-existing
From there, the diagnosis is that the 'shelve' implementation is incomplete: it assumes that shelving a set of changes will produce no conflicts which is not the case here.
Shelving the 'beans -> spam' rename means 'spam' should be restored which conflicts with the unversioned 'spam' that has been added after the rename.