Looks like original Desay bootloader does not handle DFU package with softdevice and bootloader combined correctly. Funny thing but it does overwrite itself correctly with new bootloader but for some reason it does not update softdevice 3.0 or 3.1 correctly. It almost does, all data between addresses 0 - 0x1f000 is almost fine except one part between 0xE000-0xE7FF where after DFU update is just 0xFF. Which is pretty strange because it does handle softdevice update 2.0.0->2.0.1 where same locations are updated correctly.
I found this is known Nordic bug described here with exactly same symptoms.
Knowing that, I managed to patch Desay bootloader binary and fix the bug. Then I managed to update DS-D6 to Espruino SDK12 based bootloader+SoftDevice 3.0 and then I could successfully upload current SDK12 based Espruino build which seems to work just fine! I can also reboot back to bootloader when holding watch button while doing reset and I also have signed package for restoring SDK11 based Desay bootloader and older soft device. So now I am back to SDK11 based espruino build with all those updates and downgrades done via DFU without needing to open the watch and use SWD :-)
Also another news is that thanks to getting some help with obtaining Desay firmware update packages for various devices it looks like all of them seem to be based on SDK11 (the app binary starts at 0x1c000 => uses 2.0.x SoftDevice) :-) So there is %99 chance that e.g. Lenovo HX03F or HXo3W (on gearbest here and here) are both SDK11 based so can be flashed over serial just like DS-D6 or DS-D9. I couldn't resist and ordered HX03W to see (it was $16.99 few days ago).
Espruino is a JavaScript interpreter for low-power Microcontrollers. This site is both a support community for Espruino and a place to share what you are working on.
I found this is known Nordic bug described here with exactly same symptoms.
Knowing that, I managed to patch Desay bootloader binary and fix the bug. Then I managed to update DS-D6 to Espruino SDK12 based bootloader+SoftDevice 3.0 and then I could successfully upload current SDK12 based Espruino build which seems to work just fine! I can also reboot back to bootloader when holding watch button while doing reset and I also have signed package for restoring SDK11 based Desay bootloader and older soft device. So now I am back to SDK11 based espruino build with all those updates and downgrades done via DFU without needing to open the watch and use SWD :-)
Also another news is that thanks to getting some help with obtaining Desay firmware update packages for various devices it looks like all of them seem to be based on SDK11 (the app binary starts at 0x1c000 => uses 2.0.x SoftDevice) :-) So there is %99 chance that e.g. Lenovo HX03F or HXo3W (on gearbest here and here) are both SDK11 based so can be flashed over serial just like DS-D6 or DS-D9. I couldn't resist and ordered HX03W to see (it was $16.99 few days ago).