Re:When bad people do good things
I've mentioned this in another thread but you really must try Stephen Donaldson's Gap Series. Within the storyline, people are constantly changing. For example, in book 1 Angus Thermopyle is, without a doubt, the baddie. But things are constantly shifting...sometimes he does good things and then resorts to his usual depravity. Nick Succorso seems to be the hero but, he also has a deep well of pragmatism into which he delves.
The seriously flawed characters are by far the best in my opinion (probably bacause they are the most realistic).
Hamlet is a classic example of somebody that is neither good nor bad but stuck somewhere in the middle - ensnared by his own rage and indecision. It took me ages to work out why I liked him so much... and then it struck me. He is probably the most human character that Shakespeare created.