Esto me suena a un problema de ZeosLib con las marcas de registro (bookmarks). Cuando llamas a First, el cxGrid responde rellenándose con todos los registros del conjunto de datos asociado. Para esto lo recorre desde el primero hasta el último, y al finalizar regresa el conjunto de datos al registro donde se encontraba posicionado. Esto último lo hace mediante
bookmarks, pero si el conjunto de datos (en este caso un ZQuery) presenta algún problema con la propiedad Bookmark o el método GoToBookmark, ese "regreso" no se realizará y quedará posicionado en el último registro que leyó el cxGrid.
Alguien más ya pasó por esa situación:
http://www.devexpress.com/Support/Center/p/Q242456.aspx
No tengo Delphi 2010, pero si alguien pudiera confirmar si lo mismo ocurre en XE2, con gusto puedo echar una mirada.
Saludos.
Al González.
Agrego: Para salir del paso por el momento, puedes intentar llamando a los métodos DisableControls y EnableControls del ZQuery, antes de llamar a First y después de la exportación a Excel, respectivamente.