to_date( trunc( sysdate ) || '13:00:00','DD-MON-YY HH24:MI:SS' )
An Innocent-looking query ... but with nasty, implicit Type Conversions all over the place.
Breaking it down:
Start with sysdate(). (DATE Data Type)
Truncate that value, to remove the Time portion. (Still a DATE Data Type)
Implicitly cast that value into a VARCHAR, using whatever NLS_DATE_FORMAT happens to be in force, then concatenate the time bit on the end of that, without any intervening space to separate the two bits, and finally
Try to convert the resulting varchar value back into a DATE Data Type, using the explicit format given (which, by the way, includes a space between the data and Time portions).
If those internal conversions don't give you something that exactly matches that Date/Time parsing pattern? Boom!
Remove the last to_date() call and see what [varchar] value you're actually getting.
I suspect this will work if you remove the explicit Date/Time "pattern" and use whatever [NLS setting] the database is currently using.