BTW, Finlee - this points to the problem of taking evolutionary theory and applying it to morality. Evolution is a process that works on societal levels through mechanisms that impact individuals (i.e. mutation hits, passes on a genetic advantage, the individuals who possess that trait survive at higher rates, species eventually incorporates that trait). But though evolution happens at a species level, that occurs because in the run-up to species level evolution the new trait provides an advantage to individuals.
Morality simply doesn't work like that. If the benefits of morality are societal (such as your hypothesis with respect to the survival benefit of charity), then individual moral outliers won't receive any advantage and therefore there is no internal mechanism for propagating the evolving morality.