i see you've already addressed the altruism issue, but you are stuck on a logical falsehood. you're saying that because any act of altruism or any super-erogatory act may be for selfish reasons, all are necessarily for selfish reasons (ie wanting to be (or to be seen as) the kind of guy that does a charitable act). this cannot possibly be said to be true. it is a generalization that is wholly unprovable.
and at the end of the day, even if it is, it's still choice for many of the reasons i've listed above. it's not just a simple computation with clear answers. it's a complex computation with decisions made on the initial inputs and decisions made on the various outputs. no human being is a completely rational actor that can break any decision down to a surefire answer every time. as soon as one person has to make a decision based on inputs or equal outcomes you have free will. i don't see how you can deny that.