Me da que el error está en
Código Delphi
[-]Params.ParamByName('ID_CUOE').AsInteger := X
Estás asignando la variable índice del FOR (X) cuando lo que deberías es asignar el valor del campo del registro al que acabas de moverte.
Y me da que si haces un Refresh de la tabla dentro del bucle seguramente se reinicia también la propiedad Multiselect del DbGrid y pierdes esa información, compruébalo con el debugger.