Yo interceptaria la entrada en la columna por una parte, y por otra que estuvieramos añadiendo un nuevo registro, ya que si estuvieramos en edición, es decir modificando un dato ya existente no procedería que nos modificará la fecha.
Código:
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
if (TstringGrid(Dbgrid1).col = 2) and (DataSource1.State in [dsInsert]) then
Table1Fecha.Value:=Date;
end;
Por otra parte yo le adjudicaría directamente el valor al campo fecha, como en el ejemplo.
Un Saludo.