Lo 0 extra viene aggiunto perché l'intero valore su cui lo stai impostando è dispari. SQL Server lo riempirà con uno 0 extra per renderlo uniforme.
declare @varmax varbinary(max)
set @varmax = 0x1234567 --odd
select @varmax --returns 0x01234567 with the padded 0
set @varmax = 0x12345678 --even
select @varmax --returns 0x12345678
Il tuo 9 viene eliminato perché stai inserendo un numero dispari di byte che riempie il valore massimo. Quindi, viene inserito uno 0 ma questo supera il numero massimo di byte e quindi sembra anche troncato. Sono stato in grado di replicare il tuo errore... ma non conosco ancora un modo per aggirarlo.
Ecco il valore che ho usato per il tuo test. Ignora i risultati... ma puoi copiarli nel tuo SSMS e vedere l'output corretto.