wget retorna um código de saída diferente de zero no erro; especifica especificamente o status de saída == 8 se o controle remoto emitiu um status 4xx ou 5xx. Então, você pode modificar seu loop bash para desvincular o arquivo se o wget não sair com sucesso:
for i in {1..10}
do
wget --accept .jpg,.jpeg --cookies=on --load-cookies=cookies.txt -p "http://www.someforum.com/attachment.php&id=${i}" -O "image${i}.jpg" || rm "image${i}.jpg"
done
Da mesma forma, o curl tem uma opção --fail, com a qual ele não salvará o arquivo e retornará o status de saída 22 quando o status http for > = 400.