This API has a caveat where it will not apply patches that do not list the given ProductCode in their Template summary properties even if the patch's transforms do not validate the ProductCode.
For example, an MSP contains one set of MSTs and the primary MST does not set the validation bit MSITRANSFORM_VALIDATE_PRODUCT. Consequently, not all possible target ProductCodes (perhaps not all are known at build time nor needed to build a transform that would otherwise be the same for all products) are listed in the MSP's Template summary property.
As a result, passing this MSP to MsiApplyMultiplePatches() with a specific ProductCode that is not listed in the MSP's Template summary property will not apply that MSP to the product.
Is a workaround, call MsiInstallProduct() with the same ProductCode and the PATCH property set to the full path of the same MSP and patch applicability, sequencing, and supersedence will happen correctly for that product.