The bug seems to completely erase the nbt data of the block, to reprodice simply put this command in a command block and run it twice.
setblock ~ ~1 ~ dropper facing=up replace {Items:[{id:"minecraft:stone",Count:1b}]}
The first time the command is run there will be a stone block in the dropper and the second time the dropper will be empty.
This looks like a simple problem of the advacement for the recipe not specifing the data in the json file.
Make sure your using UTF-8 encoding not ANSI encoding.
I fixed your command
/summon Armor_Stand ~ ~1 ~ {ShowArms:1,CustomName:Elf,CustomNameVisible:1,ArmorItems:[{id:leather_boots,Count:1},{id:leather_leggings,Count:1},{id:leather_chestplate,Count:1}]}
First of all you had leather boots written twice. Also you need to write it in order boots, leggins, chestplate, helmet and you need to specify the amount, it defaults to zero I think.
I can reproduce it using the same setup in the screenshot above as long as there are blocks around 0 0 and using cobblestone walls,
This bug is not fixed in 16w50a.
Only with cobblestone walls though
The carrot on a stick takes no durability at all in 16w50a.
I realized that afterwards. Anytime the number is a string it will always give protection.
I changed the enchantments to their numerical ids and the enchantments still do not get anything but protection.
As of 1.12, the NBT parser was updated and any non alpha-numeric characters [a-zA-Z1-9_] have to be put in strings so use
instead of