Finalmente he conseguido que funcione.
Cuando un cliente realiza el pago de un pedido, o cuando lo hacemos desde el backoffice, se genera automáticamente la factura en una determinada ruta (en mi caso, en una carpeta nueva llamada pdf_order_invoices dentro de docs.
Para ello he sobreescrito el método validateOrder de clase PaymentModule cambiándolo ligeramente, y he situado este nuevo fichero en override/classes/PaymentModule.php
Él código es el siguiente:
abstract class PaymentModule extends PaymentModuleCore
{
public function validateOrder($id_cart, $id_order_state, $amount_paid, $payment_method = 'Unknown',
$message = null, $extra_vars = array(), $currency_special = null, $dont_touch_amount = false,
$secure_key = false, Shop $shop = null)
{
//Código de PaymentModuleCore.validateOrder() hasta el bloque que viene comentado con "// Join PDF invoice"
//Tras ese bloque, metemos el siguiente código
//Para generar la factura y guardarla físicamente al realizarse el pago de un pedido, tanto en el frontoffice como en el backoffice
// Creamos el registro de la factura en BD, en la tabla ps_order_invoice
$order->setInvoice(true);
//Obtenemos los datos de la factura
$order_invoice_list_aux = $order->getInvoicesCollection();
//Instanciamos el objeto PDF con los datos de la factura
$pdfAux = new PDF($order_invoice_list_aux, PDF::TEMPLATE_INVOICE, $this->context->smarty);
//Generamos la factura
$file_attachementAux = $pdfAux->render(false);
//Damos el nombre al pdf que vamos a generar
$nombreFicheroSalida = 'oi_'.str_pad((string)$order->id, 10,"0",STR_PAD_LEFT).'.pdf';
//Guardamos la factura en la ruta correspondiente
file_put_contents(_PS_ROOT_DIR_."/docs/pdf_order_invoices/".$nombreFicheroSalida, $file_attachementAux);
// FIN Codigo Añadido
//Resto de código de validateOrder
}
}