Ahora sí, no me estaba actualizando la entrega porque no le estaba pasando el Commit.
Este es el code de ejemplo que estoy usando por si las moscas:
"Esta es una prueba
SELECT * FROM lips INTO TABLE t_entregas
WHERE vbeln = no_entrega.
**Datos de cabecera*****************************************************
header_data-deliv_numb = no_entrega.
header_control-deliv_numb = no_entrega.
techn_control-upd_ind = 'U'."Actualizar
"Ahora suponemos que en t_entregas solo iran las posiciones a modificar
LOOP AT t_entregas.
item_data-deliv_numb = t_entregas-vbeln."Entrega
item_data-deliv_item = t_entregas-posnr."Posicion
item_data-material = t_entregas-matnr."Material
item_data-dlv_qty = t_entregas-lfimg."Cantidad modificada de la entrega
item_data-dlv_qty_imunit = t_entregas-lfimg."De nuevo cantidad
item_data-fact_unit_nom = t_entregas-umvkz."No sé que es pero está en la LIPS
item_data-fact_unit_denom = t_entregas-umvkn."Ni idea
item_data-sales_unit = t_entregas-vrkme."Unidad medida de venta
IF t_entregas-kzpod IS NOT INITIAL."Este campo lo tomé al azar para pasar A si se actualiza la pos
"O pasarle B si se borra la misma.
item_control-deliv_numb = t_entregas-vbeln.
item_control-deliv_item = t_entregas-posnr.
IF t_entregas-kzpod = 'A'."Actualizar
item_control-chg_delqty = 'X'.
ELSEIF t_entregas-kzpod = 'B'."Borrar
item_control-del_item = 'X'.
ENDIF.
APPEND item_control.
ENDIF.
APPEND item_data.
ENDLOOP.
"Modificar entrega
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
EXPORTING
header_data = header_data
header_control = header_control
delivery = no_entrega
techn_control = techn_control
TABLES
item_data = item_data
item_control = item_control
return = t_return.
IF t_return[] IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.