Hola,
Creo que podrías utilizar una matriz asociativa para tu matriz de productos, así podrías evitar duplicados basándote en un índice, que sería tu código de producto. Así, al agregar una matriz de producto, quedaría de la siguiente forma:
Código:
$this->data['products'][product_id] = array(...
Cuando requieras agregar una nueva matriz del producto, podrías verificar si existe mediante:
Código:
if( isset($this->data['products'][product_id])){
$this->data['products'][product_id] = array(...
}