A case function returns the result for the first boolean expression inside it to evaluate to True.
Why don't you use a conditional format expression? That would separate this into two calculations--one for applying the color change and one for computing the number of expiry days.
I think your textFormatRemove function is producing a text result. "9" is greater than "28" when the values are text rather than number. Change the first term to:
@Expiry_Days = getasnumber ( TextFormatRemove ( ( expiry_date - (Get(CurrentDate) ))) ) ;