Costumávamos ter um problema semelhante no magento 1.7, aconteceu porque introduzimos um "novo" tipo de produto que é um pacote de produtos configuráveis. Nesse caso, tivemos alguns produtos que eram ao mesmo tempo pai de alguns produtos e filhos de alguns outros (os pacotes) dessa forma quando _copyRelationIndexData foi chamado por reindexProductIds tabela catalog_product_index_price_tmp foi preenchida com algumas linhas pertencentes a "produtos compostos" causando a "violação de restrição de integridade" quando reindexEntity é chamado. :
protected function _copyRelationIndexData($parentIds, $excludeIds = null)
{
if(!is_null($excludeIds) && is_array($excludeIds)){
$excludeIds = array_merge($excludeIds,$parentIds);
}
return parent::_copyRelationIndexData($parentIds, $excludeIds);
}