I’ll be boring and directly quote what was said in the relevant meta.SE thread:
We just did a major revamp of how badges are awarded behind the scenes to drastically reduce the load on SQL Server. It now takes advantage of some pre-compute work we're doing to track badge progress in the profile.
However, I screwed up 2 queries, specifically the text names of the badges that prevent duplicate awarding. I was thinking to myself earlier "hey, maybe we should pass these in" as part of the rewrite - but it's not quite so simple. I'll take another look at this soon but when we're not fighting fires from a SQL Server upgrade. The cardinality changes which hosed some of the bigger badge queries needed urgent attention here, which ended up as a major revamp and introduced the 2 errors reported here.
Apologies for all the bad grants here - that certainly wasn't the intention. Due to how badges get tested, it's also not a symptom that shows up locally. If I can change this to a param exclusion passed by the code then things like this become far less likely to happen going forward.
I have cleaned up all achievements and grants associated with the bad code. User badge counts (on user cards and flair) will sync up tonight as part of a regular process.
— answer by Nick Craver.
The problem was fixed yesterday at about 8.38 p.m. UTC. Duplicate badges have been revoked and should no longer show up. (My duplicate excavator on Anime and Manga certainly disappeared.)