من فایل شما رو آزمایش نکردم اما تنها با خواندن عنوان، میتونم بهتون بگم که این یک مشکل شناخته شده است.
الگوریتم TeX--XeT در موتور e-TeX که موتور XeTeX از آن استفاده میکنه نودهای whatsit رو در محیط راست به چپ برعکس میکنه. همه کارهای گرافیکی (رنگ، درج تصویر، لینکها، رسم شکل، rotate کردن، reflect کردن و ...) توسط خود تک انجام نمیشه بلکه شما با استفاده از دستور بدوی \special یک سری instructions برای درایور (برای موتور XeTeX درایور dvipdfmx هست) میفرستید و این درایور هست که با توجه به این instruction کارهای گرافیکی رو برای شما انجام میده.
به عنوان نمونه، برای رنگ کردن my text این instructionای هست که شما برای درایور میفرستید:
\special{color push rgb 1 0 0}my text\special{color pop}
حالا چون الگوریتم TeX--XeT در محیط راست به چپ نودهای whatsit را برعکس میکنه، instructionای که درایور دریافت میکنه
\special{color pop}my text\special{color push rgb 1 0 0}
هست که بصورت منطقی باعث ایجاد مشکل رنگ میشه.
اگر شما از بسته bidi استفاده نکنید، نمیتونید هیچ کدوم از کارهای گرافیکی (رنگ، درج تصویر، لینکها، رسم شکل، rotate کردن، reflect کردن و ...) رو با موتور XeTeX انجام بدهید. بسته bidi سخت کار میکنه و نهایت تلاشش رو میکنه تا همه این کارهای گرافیکی به درستی انجام بشه.
متلسفانه در سطح بسته bidi کار بیشتری نمیشه انجام داد چون این باگ موتور هست و کاری که بسته bidi انجام میده این هست که این باگ رو با ماکرونویسی تا جای ممکن ترمیم کنه اما این ترمیم یک limitای داره و بیشتر از اون نمیشه کاری کرد. این باگ باید بصورت اساسی در موتور درست بشه.
در حال حاضر تنها پیشنهادم این هست که از گزینه
linktocpage=true
هنگام فراخوانی بسته hyperref استفاده کنید. استفاده از این گزینه باعث میشه تا شماره صفحه لینک داشته باشه نه خود متن.