Вы столкнулись с очень хорошим php WTF:
foreach ($rowsProducts as &$product)
делает ссылку на $ product. Не только для цикла, но навсегда . Если затем вы используете foreach с использованием $ product в качестве переменной цикла позже (или делаете что-либо для записи в $ product), он перезапишет последний элемент первого цикла foreach.
Просто используйте foreach ($rowsProducts as $key => $product)
и присвойте $rowsProducts[$key] = $product;
в конце вашего тела цикла, если вы что-то изменили.
Другое решение будет вызывать unset($product);
после вашего первого цикла, чтобы избавиться от ссылки. Но, как правило, безопаснее не пользоваться ссылочными циклами, поскольку вы не можете забыть сбросить их.