Let me see if I can explain this much more simply:
ORDER BY takes as its arguments a set of expressions, each optionally followed by a direction indicator, separated by commas.
Essentially, any expression you put in there either is or becomes a column in the intermediate result set, which is then sorted, and the final result set is returned from that.*
So when you say
CASE WHEN @Flag = 1 THEN 'FIELD DESC' END
you're creating an expression which is equal to 'FIELD DESC' when @Flag = 1, or NULL otherwise, and telling SQL Server to sort the data by that expression (ASCENDING, since that's the default.) Since that expression is constant in either case, the data appears to be "not sorted."
and when you say
CASE WHEN @Flag = 1 THEN FIELD END DESC
you're creating an expression which is equal to FIELD when @Flag is 1, or NULL otherwise, and telling SQL Server to sort by that expression, descending.
The only way in which the first example would work is if SQL Server treated variables as macros and expanded them into the SQL query string before execution, which would make them
a) no longer variable, and
b) no longer useful to prevent SQL injection exploits.
So if the former seems intuitively correct to you, then you need retake some basic programming logic classes.
* This is the logical process; actual procedure used may vary.