It's not obvious from the example, but there is a data type conversion!
This is because there are two date representations in Oracle Database:
SELECT DUMP(TS), DUMP(TS+1), DUMP(TO_DATE(TS)) FROM foo WHERE sysdate >= ts + 1;
DUMP(TS) DUMP(TS+1) DUMP(TO_DATE(TS))
Typ=12 Len=7: 120,124,5,7,16,16,48 Typ=13 Len=8: 232,7,5,8,15,15,47,0 Typ=13 Len=8: 232,7,5,7,15,15,47,0
Typ=12 Len=7: 120,124,5,6,16,16,48 Typ=13 Len=8: 232,7,5,7,15,15,47,0 Typ=13 Len=8: 232,7,5,6,15,15,47,0
Notice that the column is type 12, the column + 1 is type 13.
MOS note 69028.1 explains these in detail.