CString::Format doesn't handle the %E case correctly -- it neglects to allocate a new buffer and overwrites the default CString buffer -- "0.0E000" was showing up in the strangest places! See CString::FormatV in strex.cpp (for platform builder owners).
%e seems to work correctly, or you can call GetBuffer(int size) with size big enough to cover your digits...