binary (16) - fixed length. It always uses 16 bytes of memory for each row, filling in any additional bytes 0x00 or 0x20 (depending on the version of MySQL) and deleting them on SELECT. varbinary uses a variable amount of space - all that is needed to store data on this line.
If your data is always 16 bytes, there is no difference. Actually, probably, there is no difference with a small column.