I've had good experiences with development teams from China, actually, but that's just one data point. India, however...
It's like the developers out of India simply don't care. Code quality, functionality, deadlines, figuring anything out on their own, the amount of hand-holding I've had to do is extremely frustrating. So, I spent some time one night searching the 'net and looking for information on how the schools work over there.
Turns out that many of the schools in India don't actually teach you much. Their courses are geared towards rote memorization and following instructions. If you want them to do A, and only A, with no changes, they can do A very, very well. Once you deviate from A, even just a bit, they won't know what to do.
They call it "mugging" over in India (and no, not mugging as in attacking someone and stealing their cash - I have no idea how the term came to be). You memorize. You don't deviate. You do not think for yourself. You do not understand a concept and come up with a solution; you only follow the solution that's been provided.
It really does seem to explain all of the issues I've ever had with IT workers out of India. There's limited capability for problem solving because they're not taught how to solve problems in a general sense, they're simply taught the solution to a specific set of problems. Give them a step by step set of instructions and it will be done - but then why not just automate?
In contrast, American schools push students to understand concepts first and then apply them to find a solution. We're trained to solve problems and to think. That seems to be the core difference.