After printing out the entire packet bytes in the queue and going through it, it looks like that the MAC header is indeed added before queueing, but for some reason the MAC header pointer in sk_buff is not updated.
EDIT: upon further review, the MAC header is added into the sk_buff struct before queuing, but the actual destination MAC address is not added until it reaches the outgoing hardware interface.