Questo codice a me funziona benissimo`% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = XeLaTeX
\documentclass[a4paper,12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{fontspec}
\usepackage{amsmath}
\usepackage[math-style=upright]{unicode-math}
\setmainfont[Ligatures=TeX]{TeX Gyre Pagella}
\setmathfont{Asana Math}
\usepackage{polyglossia}
\setmainlanguage{italian}
\usepackage{microtype}
\DeclareRobustCommand*\ap[1]{\textormath{\textsuperscript{#1}}{_{\mathrm{#1}}}}
\DeclareRobustCommand*\ped[1]{\textormath{\textsubscript{#1}}{^{\mathrm{#1}}}}
\begin{document}
\begin{equation*}
p \leftrightarrow q
\end{equation*}
bla bla
\begin{equation}
p \leftrightarrow q
\label{equ:coimplicazione}
\end{equation}
bla bla
\begin{equation}
p \leftrightarrow q \tag{D\ped{2}}
\label{equ:D_2}
\end{equation}
L'equazione~\eqref{equ:D_2} dice che\dots
\end{document}}`
Nel file .aux il label è registrato come:`\newlabel{equ:D_2}{{{D\ped {2}}}{1}}` che è identico a quanto tu riporti nel tuo messaggio. Dunque non è chiaro dove sia l’inghippo.