Olá Jonathan,
Não sei por que o EXCEPT não está funcionando, mas para esta consulta parece excessivo de qualquer maneira. Simplesmente pode reverter a última condição e adicioná-la à primeira consulta:
SELECT DISTINCT T2.[U_CardCode], T2.[U_UPC], T2.[U_Description]
, T2.[U_Price], T2.[U_CustPart], T0.[ItemCode], T0.[ItemName]
, T1.[PriceList],T3.[ListName], T1.[Price]
FROM OITM T0 INNER JOIN ITM1 T1 ON T0.ItemCode = T1.ItemCode
INNER JOIN [dbo].[@CLIENTDESC] T2 ON T0.[ItemCode]= T2.[U_UPC]
INNER JOIN ITM1 T4 ON T4.[ItemCode] = T1.[ItemCode]
INNER JOIN OPLN T3 ON T1.PriceList = T3.ListNum
INNER JOIN INV1 T5 ON T5.ItemCode = T0.ItemCode
WHERE (T2.[U_Price] < 0 OR T1.[Price] < 0
OR ( T1.[Price] < T2.[U_Price] AND T1.[PriceList] = '2')
OR ( T1.[Price] > T2.[U_Price] AND T1.[PriceList] = '7')
OR (T4.[PriceList] = '2' AND T4.[Price] < T1.[Price]))
AND T0.[validFor] = 'Y'
AND t5.DocDate <= GETDATE() - 7
Saudações,
Johan