But Viorel, you never have the incorrect value in your script...
Working from Viorel's script, here is an example how it may have happened, and how to repair it..
declare @original varbinary(max) = 0x504B03041400060008000000210094DE92
declare @converted varchar(max) = convert(varchar(max), @original, 2)
declare @accident varbinary(max) = convert(varbinary(max), @converted)
declare @revstring varchar(max) = convert(varchar(max), @accident)
declare @revbinary varbinary(max) = convert(varbinary(max), @revstring, 2)
select @original, @converted, @accident, @revstring, @revbinary
The key is that if you convert from varchar to binary without a style code, the characters will be copied bit by bit. That is the string '5' will be 0x35 - which is the binary representation of the character '5'. To convert to and from hexstrings you need the style codes 1 or 2.