bueno, creo que te respondes tu mismo. En lugar de un bucle for, utiliza un bucle while
Código:
procedure borramsgs;
var
i: integer;
begin
i := 0;
while i <= Form1.list2.Items.Count-1 do
begin
if Form1.list2.Items[i].Checked then Form1.list2.Items[i].Delete;
end;
end;