Well I put the log2 code back in and did my exposure test, and it was wrong again. I figured something else must be going on. I think I figured it out.
I'm using shoot_full_only to take the shots, to avoid metering each shot. As soon as get_exposure_count() changes, I call my routine to get the log2 of the sum of the pixels. I added a volatile variable that so I can tell when I'm in build_shot_histogram, and discovered that I'm calling my routine BEFORE it's over, or rather right as it's finishing.
So the faster log2 routine is picking up the sum of the pixels before build_shot_histogram has finished adding them up! It sounds weird, but I'm pretty sure that's what's happening. When I delayed until the volatile variable shows the build is done, the results from log2 are correct. I'll start a new thread to discuss the timing issues.