I have a ATmega32u4 from factory with DFU inside. The HWB is pull down, and RESET pin is pull up.
The first USB plug, DFU programmer appears on my Linux box. I upload the firmware without problem. Now, every time I plug my ATmega to USB the application runs first, instead of DFU. But, when reset MCU by software, the bootloader code runs.
According to datasheet, default fuses are: BOOTRST = 1 and HWBE = 0. With this fuses and signals, the expected behaviour should be always the first one as the image shows.
I don't know why, when reset by software, the bootloader runs.