entonces, lo que sobra de la "primera versión" que has puesto es el "next" en caso de borrar...
Código:
While not Dbf1.EOF do
if Dbf1.FieldByName('C_CONCEPTO').AsString = '' then
begin
Dbf1.Delete;
Dbf1.Next; <---- quita esta línea ------<
end
else
Dbf1.Next;
porque en caso de borrar, se posiciona en el siguiente, pero al poner "next", se lo salta y va al otro que sigue, o sea, cada vez que borras una línea te estás saltando otra.