Among other things, a shelf has two fields, Name and InternalName
These must both contain the same value, which would be the name of the shelf, so if your shelf was called "My Shelf" then Name and InternalName should both be "My Shelf"
If they do not both contain the same value then you can see exactly the issue you describe. I saw this when we were adding Shelf Sync to the iOS application. Initially we did not fill out the InternalName field and when I was syncing my Touch I discovered that I'd get duplicates of the shelf, and, I *think* the number would increase with every sync.
Once cleaned things up (more on that in a moment), and used InternalName and Name and set them to the same value, I did not see any duplicated shelves on my Touch.
How can you fix it? I think a factory reset would do it, as that would reset the database, which is where the shelf info is being stored. Now, awards and shelf info should be synced to the server (the duplication of things should not), so in theory post-reset, if you sign into your account and sync, it should pull down the info stored on the server.
The other option would be to edit the database, and depending on your bravery, you might not want to do this. I have done it and it does work, but from an "official" standpoint I'd suggest not doing it (just don't want to suggest it, have something bad happen and then have people complain that someone from Kobo told them to do it)
I seem to recall something in Calibre that manages shelves, not sure if it allows you to edit names / delete things, if so, that might work.
If you had to edit the database, there is a shelf / shelves table (I don't have my Touch or a database to hand to check) which you could look at and edit.