This is a pretty broad question! Here's my take.
I think what Scrum is really good at is teaching organizations to love agile / iterative / incremental / lean software development. For a company that's used to a command and control hierarchy of project management, the empowerment necessary for teams to succeed at being truly adaptive to their customers' needs is a massive cultural shift. Scrum makes all this approachable for organizations, with clearly defined roles and processes.
Basically, to me, it buys a team of programmers the space they need within all the politics and bureaucracy of a big company to get on with doing XP.
However with this empowerment comes responsibility. Scrum does not mandate any of the XP engineering practices, but without core practices like CI, TDD and refactoring, any scrum team will splutter to a halt after a few iterations. I personally think it is quite irresponsible for this not to be explicit in scrum's 'rules', and that would be one of my criticisms.
My other criticism is with task cards and task planning. I have yet to see a team where this was really effective: usually there's a very tiring day where you try to think through everything you'll do on the whole iteration, then you get going and find you actually needed to do something different. Measuring progress through task burn-downs feels like a good way to get teams to collaborate and bond (especially if you disavow task ownership) but ultimately it isn't a reliable way to track the progress of a team.
I place a lot more emphasis on burn-up of value or story points, and these days usually get the team to do a daily update a big Cumulative Flow Diagram chart of where we're at with that instead. The tasks stay on people's to do lists, but they don't go on the board or get managed by anyone.
The key practice, of course, is retrospectives. Mike Cohn's counter-argument to my earlier point about the XP practices is that with retrospectives, teams will end up inventing / adopting XP anyway, and this does have some validity. Certainly regular introspection is the best way of all to make sure your team is and continues to be as effective as it possibly can.