Hey @Dustin_Good!
Here’s a quick revision I made to your original formula:
IF(
{Expiration Date},
IF(
DATETIME_DIFF(
TODAY(),
{Expiration Date},
'days'
) > 30,
'Expired',
IF(
{Expiration Date} < TODAY(),
'Expiring',
'Valid'
)
)
)
This formula will return the following behavior:

I’ll give you a quick breakdown regarding this:
This is a formatted version of the formula you posted.
1 IF(
2 {Expiration Date} < TODAY(),
3 "Expiring",
4 "Valid"
5 ),
6 IF(
7 DATETIME_DIFF(
8 TODAY(),
9 {Expiration Date},
10 'days'
11 ) > 30,
12 "Expired"
13 )
The problem is found on line 5. It’s a comma syntax issue.
It seems intuitive to separate different functions using a comma, but an essential syntax rule is that you will never find commas outside of a function.
That formula is functionally: IF(a, b, c), IF(a, b, c).
Now, if you don’t want to nest a bunch of IF functions and have functions that won’t step on each, per se, you can use an ampersand in place of the comma to join them.
IF(a, b, c) & IF(a, b, c).
Here’s what that looks like:
IF(
{Expiration Date} < TODAY(),
"Expiring",
"Valid"
)
&
IF(
DATETIME_DIFF(
TODAY(),
{Expiration Date},
'days'
) > 30,
"Expired"
)

So, the ampersand joins them, but as you can see, one of the formulas returned two IF functions as true and evaluated both parameters, producing the ExpiringExpired string.
I was referring to this when I said that you want to ensure that your functions don’t step on each other’s toes.
To prevent this, you’d either nest the second IF function or change the evaluation parameter in your first IF function.
It can be confusing, but once you write out or rubber duck what you’re trying to do, it becomes much easier to think about nesting.
This makes it easier for me to identify strange syntax issues.
But to each their own.