I was going to suggest using FontForge, which is free and open source, but it can be a little user unfriendly at times and I struggled to get this working in any reasonably easy way with a font that had a large number of small caps (including small cap versions of accented characters and punctuation etc.).
Glyphs (Mac only sorry) is a lot more user friendly and got me where I needed to be a lot quicker so I'll give a quick run down of how to do this in Glyphs.
Glyphs isn't free but there is a fully functional trial that'll work perfectly well for this.
Small caps filter
There is a "Smallcaps" filter on the left sidebar under "Letter", but that will only show you small cap variants of letters, not anything else (e.g. punctuation). If you only have small cap letters then the default filter will work fine, otherwise you can create your own filter...
Small caps will be named with a suffix of ".sc" so you can set up a smart filter to show you anything with that suffix. Just hit the cog at the very bottom left of the sidebar and choose "Add Smart Filter":

Set your filter to show "Glyph Name" "ends with" ".sc".

You now have a custom filter in the sidebar to show you all the small caps available in the font.
Remove unwanted lowercase
Use the small caps filter to compare with the rest of the font and and delete all the lowercase variants that you have small caps for; this'll generally be everything you see from the "lowercase" filter and maybe some punctuation and other stuff.
(Just select the glyphs you want to delete and go to Glyphs → Remove Glyph.)
Rename the small caps
Glyphs automatically maps your exported font based on the glyph names so all you need to do is rename the small caps to remove the ".sc" suffix.
There is a handy find & replace that works on glyph names so just go to your small caps filter, select all the glyphs and go to Edit → Find → Find & Replace.
Enter ".sc" in to the "Find" field and leave "Replace" empty. Hit "Replace"...

Done. Export your font (File → Export...) and you're good to go.
Glyphs is scriptable so you could cut down on the time this takes (mostly the time it takes to figure out which glyphs need deleting), but doing it manually took me no more than 5–10 minutes so there's probably no point unless you're doing this often or you have some awkward fonts that have non-complete sets of small caps.