Ну правильно получается такая фигня.
Что написал, то и получается.
Тебе надо во внутреннем цикле добавлять только если не найдено по итогам всего цикла. А лучше, для простоты понимания, воспользоваться методом IndexOf:
Код:
var
i : Integer;
begin
for i := 0 to ListBox1.Items.Count - 1 do
if ListBox2.Items.IndexOf(ListBox1.Items[i]) = -1 Then
ListBox2.Items.Add(ListBox1.Items[i])
end