I'd be inclined to suspect the hardware with weird behaviour like that (memory and disk errors in particular).
Me too, but how would that explain the observation that it's occurring only within one database (and on all tables within that database)? The only thing all tables within a database have in common on disk is that they reside in the same directory.
And the ctids of the duplicate rows indicate that they're allocated sequentially in the same page as the legitimate rows. (The tables are mostly all less than a dozen rows.) How could this be explained by disk corruption?
I suppose memory corruption is possible, but it still seems oddly specific.