I don't have expertise with PID firmware optimization, but I do have reasonable C coding experience. So I've gone through the baro functions to see if I could notice anything unusual. No doubt others have done this too. I can confirm that the BMP085 I/O routines are fine (they meet the data sheet timing requirements). The altitude conversion routines are fine too.
But I noticed that my Baro data was very unstable/noisy. Because the sensor is used in the 3X over-sample mode it should provide 0.25 meter resolution, but the noisy data seems to comprise the integrity. For example, when the baro function is enabled the AltHold variable often latches a randomly noisy value. On my model this causes a significant throttle change when the feature is enabled. I tamed this problem by adding a simple low pass filter (averaging) function to the pressure data. See source file filters.pde
Using some debug code I watched the PID values that are calculated in the altitude hold code section. I found that the VEL PID's dominated the ALT PID values and so I really never could see the effects of the altitude sensing when it reached the throttle code. I was surprised to find that reducing the VEL PID's to zero also disables the Altitude hold feature. I'm not sure if this was intentional, but certainly something to consider when setting the ALT and VEL PID values in the GUI.
To allow me to see the ALT PID debug data I simply commented out the VEL PID code. I found that the ALT's P-term was very good (note: my debug testing used the averaged pressure data from my filter routine). I found that it had good resolution, seemed reasonably stable, and so it appears good enough for what we need.
However, the calculated D term was always zero, not matter how quickly I moved the model up and down. So this term seems to need some work.
The I term has an unusual problem. It integrates fine with positive accumulated errors but the expected negative error values do not have much effect on it (value does not decrement very well). So it eventually has a significant data bias. I tried a variety of I value settings without success.
With the velocity code removed, I flew with just the altitude hold P-term (I and D were zero'd in the GUI due to their problems). I was able to hover an entire pack at low altitude without touching the throttle. However, with just the P term being used (I and D are zero'd) the model yo-yo oscillates up and down, especially when hit with some wind. But it was working!
Long story short, I'm not sure if any of this information helps with the altitude hold improvements. Optimizing the PID code is a bit out of my league, but I am interested in doing what I can to help solve the problem. If anyone has any comments, or has some working beta code to share, then please chime in.

- Thomas