Bueno, revisando mas de cerca tu SQL, es obvio que se va a actualizar todos los registros con el ultimo item, y no es que se dupliquen, el problema es como esta generado el SQL, basicamente tu SQL dice:
Actualizar todos los registros de detalle_temp_alta con el id_posada = $id_posada
Que quiere decir esto? bueno pues que todos los que tengan id_posada por ejemplo 1, todos esos se van a actualizar primero a 4 y luego de nuevo actualizarás todos a 7, es por eso que cuando vez de nuevo los registros parece que de duplican los items del array $_POST['fecha_temp_alta'], lo que debes hacer es o hacer un where al id de cada item (el cual debe ser unico):
Código PHP:
Ver original//algo así, no se como este generada tu tabla detalle_temp_alta
$sql = "UPDATE detalle_temp_alta SET fecha_temp_alta='".$fecha_temp_alta[$i]."' WHERE id ='".$id_registro."'";
o buscar la forma de diferenciar cada registro de los demás, ya que como lo estas haciendo si tienes 5 registros con el id_posada = 1 los 5 registros quedarán con fecha_temp_alta = 7---