TRY/CATCH only reports the last (and most useless) error
You can try using THROW to get the full exception raised:

If the THROW statement is specified without parameters, it must appear
inside a CATCH block. This causes the caught exception to be raised.

begin try
    BACKUP DATABASE @DB TO DISK = @targetfile
    WITH DIFFERENTIAL, RETAINDAYS = 2, COMPRESSION,
    STATS = 4
end try
begin catch
    SELECT ERROR_NUMBER() AS ErrorNumber,
            ERROR_SEVERITY() AS ErrorSeverity,
            ERROR_STATE() AS ErrorState
            , ERROR_MESSAGE() as ErrorMsg; 
    THROW;
end catch

Result

Msg 3035, Level 16, State 1, Line 8 Cannot perform a differential
backup for database &quot;...&quot;, because a current database backup does
not exist. Perform a full database backup by reissuing BACKUP
DATABASE, omitting the WITH DIFFERENTIAL option. Msg 3013, Level 16,
State 1, Line 8 BACKUP DATABASE is terminating abnormally.