What is the cause of this problem with CONVERT()?
Decimal and whole numbers are encoded very differently in varbinary. Decimals need more space. Try:

SELECT CONVERT(VARBINARY(32), 1), CONVERT(VARBINARY(32), 1.0);


As for your ultimate goal, storing whole numbers as varbinary to save space, I think you've answered that question yourself - not worth it.