надо посмотреть что приходит в $product_info['price'] - $product_info['special']
или можно сделать проверку
$data['dc_special_amount'] = false;
$data['dc_special_percent'] = false;
$data['dc_special_text'] = false;
$data['label_for_specials_label_text'] = false;
if (is_numeric($product_info['price']) && is_numeric($product_info['special'])) {
$dc_remaining_piece = $product_info['price'] - $product_info['special'];
if($dc_remaining_piece > 0){
$data['dc_special_percent'] = preg_replace('/\.(\d{2}).*/', '.$1', $dc_remaining_piece * 100 / $product_info['price']);
$data['dc_special_amount'] = $this->currency->format($this->tax->calculate($dc_remaining_piece, $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
$data['dc_special_text'] = $label_for_specials_label_text;
$data['label_for_specials_label_text'] = $label_for_specials_label_text;
}
}