how to combine multiple timestamps and keep the most recent one?
You need the greatest() function:

SELECT greatest(now(), 
                now() + interval '1 minute', 
                CURRENT_DATE::timestamptz, 
                NULL);

           greatest            
───────────────────────────────
 2018-04-17 19:40:04.568827+02


About NULLs:


  NULL values in the list are ignored. The result will be NULL only if all the expressions evaluate to NULL.


Please note that comparing timestamps (especially timestamps with time zones) to simple date values sometimes result in surprises.  I always try to use something like date_trunc('day', '2018-01-05'::date) to get a type that can be compared cleanly.