If you summon a block as follows:
/summon Item ~ ~ ~ {Item:{id:command_block,Count:1,tag:{display:{Name:"Blah"}}}}
The blockdata of the block when placed by a player:
{CustomName:"Blah",Command:"",x:3,y:1,z:13,id:"Control",SuccessCount:0,TrackOutput:1b,}
The blockdata of the block when placed by a dispenser:
{CustomName:"@",Command:"say hi",x:5,y:1,z:13,id:"Control",SuccessCount:1,TrackOutput:1b,}
So in summary, the game seems to automatically apply the display Name parameter to the CustomName parameter when a player places the block, but does not copy this value when a dispenser places the same block. The difference in successcount in the two outputs above is because the block was executed when dispensed.
The dispenser does not appear to be removing anything - this is about the transition from an Item in inventory to a block. The display name of the item and the CustomName of the block are two different tags, are they not? If you place a CustomName in the BlockEntityTag, the dispenser will place the block with the CustomName set. Placed blocks do not have the tag for display name.
It seems to me that this is a case where what happens when the block is placed is not consistent between players and dispensers, not that the dispenser is stripping anything.