Having the 'flag' and 'downvote' combined into the same function is a large part of the problem. If we would be able to separate those two out and define "acceptable use" policies for each, I think that would sort out part of the issue.
There are always going to be users that get upset if/when part of their reward is removed due to a downvote though. I don't think there is any platform fix that can be made for that.
Yes, making a downvote a downvote and defining their use clearly is certainly worth a shot.
Of course, someone or the other will always be upset, but we can do better.
Based on the feedback that I've seen from the devs, this is something on their radar that they are planning 'eventually' but we will probably need to live with the current implementation for a while.