Oracle: Casting timestamp as date and comparing result
Casting to a DATE datatype from a TIMESTAMP only removes the fractional seconds, therefore your direct to_date('20190516', 'yyyymmdd') comparison is rightly failing. It's just a display issue that has confused you.

Definition of the Oracle DATE datatype (from here):


  Valid date range from January 1, 4712 BC to December 31, 9999 AD. The
  default format is determined explicitly by the NLS_DATE_FORMAT
  parameter or implicitly by the NLS_TERRITORY parameter. The size is
  fixed at 7 bytes. This datatype contains the datetime fields YEAR,
  MONTH, DAY, HOUR, MINUTE, and SECOND. It does not have fractional
  seconds or a time zone.


This DB Fiddle demonstrates.

These queries probably demonstrate best:

-- cast to date, and format with TO_CHAR to show that the time element still exists
select  TO_CHAR(
               cast(to_timestamp('20190516 08:00:00', 'yyyymmdd HH24:MI:SS') as date)
                ,'yyyymmdd HH24:MI:SS') from dual; 

-- demonstrate that the fractional element gets removed 
select cast(
         cast(to_timestamp('20190516 08:00:00.123', 'yyyymmdd HH24:MI:SS.FF')
              as date) 
       as timestamp) from dual;