concerning the discrepancy between the first two approaches (GetEntries() and summing the bin contents), I think a TH1 histogram in reality has n+2 bins, the n bins plotted and an overflow and underflow bin. Therefore you should actually try to loop like
for (int i=0; i <Nbins+2;i++ )
TotalEntries=TotalEntries+Reco->GetBinContent(i);// histograms start on bin=1 not bin=0
cout << "Total Reco Entries: "<< TotalEntries<< endl;
In the last case with the loop over the tree itself, I'm not sure. What I could imagine is, that e.g. the variable you set the branch address to has wrong type and then behaves unpredictable. I.e. check whether eppid really is a int branch and not a float branch. Of course you again don't count over- and underflow with this method.