Это потому, что $order = Order::find($id);
возвращает первый экземпляр (модель), а $order_details = OrderDetail::where('order_id', $id)->get();
возвращает коллекцию. Просто измените его на $order_details = OrderDetail::where('order_id', $id)->first();
, и он будет работать нормально.
Для обработки нескольких деталей заказа:
$order_details = OrderDetail::where('order_id', $id)->get()->each(function($item) use($reorder){
$newItem = $item->replicate();
$newItem->order_id = $reorder->id; //If needed, be sure to pass $order if you do
$newItem->save();
});