Попробуйте начать с теста без omp parallel - ведь вы его даже не настраиваете перед пуском. Если результаты совпадут - настройте. В первом случае, у компилятора явно нет гарантий локальности оператора суммирования.
Можете кстати std::plus проверить, вдруг с ним сработает.
И да, под это дело есть std::transform. Реализации STL в C++11 по стандарту требуют от операндов transform гарантий, разрешающих параллельное исполнение. Остается открытым вопрос с тем, реализуют ли они параллелизм.
И да, не вижу версии с итераторами. Вот она будет быстрее всех ваших.