This thread on Apple Support Communities has an extensive discussion of the problem. People there deserve credit for finding this solution.
It seems to be caused by a problem in the internal SQLite database file that iOS uses to track downloads from and journal interactions with the App Store. The solution is to wipe the file. The file itself isn't really important; for the most part, it's just a local record of past downloads. AFAIK, the only supported thing you can do to clear that database is a full wipe and restore from backup; however, the free tool iExplorer is able to delete it.
In the iExplorer interface:
- Open your device, and navigate to Media > Downloads
- In the Downloads folder, you’ll find a file called ‘downloads.[some number].sqlitedb’
- Delete that file (Optionally: back it up first.)
- Reboot your iOS device. (A clean, empty version of the sqlite database will automatically be created.)
Ta-da! You should be free of that problem... unless some future download re-triggers the underlying bug. (Only Apple can fix that.)
For those curious:
I did some poking around in that SQLite database. It seems that there’s a bug somewhere that is resulting in occasional entries in there with a flag indicating they need to be purchased -- but the App Store itself rejects the purchase attempt for reasons such as “you’ve already purchased that app”.
Specifically, a value of 1 in the ‘is_purchase’ field of the ‘download’ table in that sqlitedb file seems to exactly correspond with the name and count of apps that “cannot be purchased” in the super-annoying dialog box.