The subscription process is notoriously problematic in XMPP. While doing extended support for multiple simultaneous subscriptions, I just noted that if I deny a subscription by sending "unsubscribed", that used to be all that was needed.
But now I see that there is still a roster item in my roster with subscription="none". It looks like ejabberd just adds it there and does not remove it when I deny the subscription. Going back to the XMPP "bible" to find out what actually shall happen, I see that it is allowed by the server to do so for tracking purposes, but it should be cleaned up after a contact denies. I cite sect. 8.2.1: "Note: If the contact's server previously added the user to the contact's roster for tracking purposes, it MUST remove the relevant item at this time."
From a users perspective I find it doubtful that I get a roster item while I'm in the middle of processing a subscription request. I think a server shall handle this tracking internally and not push items to a user before it has had any chance to reject or deny.