What each method actually returns
getValue() hands you the raw JavaScript value that Sheets stores internally: a Date object for date cells, a Number for numeric cells, a Boolean for checkbox cells, and a String for text. The cell's number format has no effect on what you get back.
getDisplayValue() hands you whatever string appears in the cell after formatting is applied. A cell holding the number 1234567.89 formatted as currency returns "$1,234,567.89". A date cell formatted as "Jun 11, 2026" returns exactly that string, not a Date.
The first time I hit the silent-fail version, I was filtering rows by date and every row passed the condition. The rendered string "Jan 5, 2026" compared against a Date object with > produced true because JavaScript coerces the Date to a number and the string to NaN, and NaN comparisons do not behave the way you expect.