It had long puzzled me as to why ambient-only light exposure would expose a grey card to a different density than ETTL flash exposure (camera controlled) would, or why Canon External (Auto photosensor controlled) would do even worse.
The ETTL underexposure was far worse 'in the early days' (of the 20D), but ETTL is much better in the 40D...In the days of the 20D you had to routinely crank in about FEC +1 even in shooting ETTL flash with the 20D. But now, with the 40D, FEC is generally not noticably needed.
Here is a series of three shots just taken with my Metz 54MZ ETTL-comptible on my 40D. The density of the 4th greyscale patch of the Colorchecker is adjusted in postprocessing with LR to achieve the same eyedropper density values for all three shots, adjusted to 60% in the flash shots (to match what the Av mode ambient light exposure result does -- without adjustment), using the Exposure adjustment. I did not try to match the location of the peak in the histogram, since the reflectivity of the photographed surfaces using flash might be different, so I simply wanted to match density of grey card.
First, the shot in Av mode with ambient light only, as the baseline...

Then the Metz Auto photosensor mode...
Lastly, the ETTL flash mode...
Note the Exposure settings in all three shots. The Metz Auto mode exposure results in identical density (60%) when adjusted back by -0.5EV, while the ETTL flash exposure results in identical density when adjusted to give +0.23EV of exposure. So ETTL flash with my 40D does result in slightly underexposed shots, but not objectionably low -- 'unlike the old days' of ETTL.
Folks can shoot a similar series using their Canon flash and using LR to balance the density of each shot, to determine precisely the amount of error of the Canon flash in External mode.