I've been working with and leading international teams for almost 10 years now, mainly with teams in India.
I see a huge gap between skillset and proficiency between the US, Europe and India. But I must qualify this - I've most been working with some of the large outsourcing companies in India, Capgemini, Infosys and Cognizant, and these companies are where you find unbelievably bad coders. I often literally have to interview 20+ candidates before I find anyone even half decent, and even then, the level is much less than a candidate with similar time-served from Europe or the US.
This shouldn't be surprising if you see how such companies run development projects when left to their own devices; they will staff a project with 5-10x more devs than would be used elsewhere, and everyone works on an unimaginably narrow part of the project - someone might literally do nothing but write maps for the ORM, another person might do nothing but edit config files. It's madness.
I have however had excellent experiences with Indian devs on the rare occasions where I've been permitted to use small, development-focused businesses. Excellent developers absolutely exist in India - but they are as rare as hens' teeth the big body shops.
I should tell you that these big body shops have a reputation for hiring really bad programmers, basically because they have "processes" that they use to turn these people into problem solvers in very specific domains. More often than not, that is what their clients want as well: human eyes on a system designed and written by someone else. When in college, these were known as "bus" companies, because they would give job offers to a busload of students, but all the offers were pitiful and the work horrible.
Just like you noticed, if you want to see real talent, look elsewhere.
But on other hand, I have a theory. Indian firms write a lot more code. Their code quality distribution probably is same as any other group but since there is more code, a large percentage of overall bad code comes from India.
It is kind of like some teams in a large organization write a lot of code but they are the one with the most bugs and they get punished. Another team that rarely has bugs but they don't write as much as code as others and are rewarded for introducing least number of bugs in production.