Where I buy my ESP8266 boards from... (Banggood)
I can read all the data back using esptool.py
/home/cnlohr/esp8266/esp-open-sdk/esptool/esptool.py -b 1000000 --port /dev/ttyUSB0 read_flash 0x00000 65536 test.bin
and everything is flawless! Every byte in its place.
Also, curiously, if I try programming the ESP8285 using DIO mode (instead of DOUT) on esptool.py, I get exactly the same boot error as I'm getting when I program it. Could the internal functions be using DIO mode?
NOTE:(IMPORTANT!)
The spi settings in the flash download tool will overwrite the setting during the compile procedure(at first serveral bytes from 0x0).
Make sure the settings are accord with the compile procedure.
The original binary will not be changed.
You can find the configured binaries in FLASH_DOWNLOAD_TOOLS/bin_tmp after the download is finished.
Especially for bootvxx.bin, it will not change and keep default settings for spi mode.
Also , you can press "CombineBin" button to get a combined binary which is already set to the mode you choose.
The flash mode are defined in the 2nd and 3rd( count from 0) byte at flash address 0x0.
Bootloader will read this bytes out and changed spi mode and size mode immediately. So this is very important for your production.
Maybe you should diff a flash dump of your method with a successful programming and check for few changed bytes.