Upon further investigation it appears to be my PSU (PicoPSU) causing the issue. I have not yet found a resolution.
I have two solutions - one software that works for all but short power failures, and a hardware solution that should always work. Sorry it's so long after you asked, but hopefully it will still help you or someone else with the same problem.
The PicoPSU I use is fed by 12V DC, so the 12V output is essentially a pass-thru. The PicoPSU doesn't have any way of knowing that the power is being lost other than watching for the input to sag, which means that the 12V output also sags. Once it notices the sag, it de-asserts the power good signal in order to let the motherboard know that power is failing. Unfortunately, the 12V line ends up falling to quickly for the power good line to give as much of a notice as is required by the ATX specification.
The reason this is a problem is because the BIOS seems to use the power good signal as a trigger to save out what power state the computer should wake up in. The code doesn't have enough time to successfully complete before the 12V line sags too far and the system shuts off.
I have found a software solution that works around this issue. The Winbond W83627-DHG-A Legacy I/O Controller is responsible for handling recovery from power failure. It is this device that the BIOS fails to write to in time on shutdown. However, you can configure the device at any time - it doesn't have to be right before a power failure. You just need code that does the following Port I/O:
Write 0x87 to port 0x2E
Write 0x87 to port 0x2E //These two writes put the controller into extended function mode
Write 0x07 to port 0x2E //Select logical device
Write 0x0A to port 0x2F //Logical device A
Write 0xE7 to port 0x2E //Select configuration register E7
(If you read from 0x2F at this point, you will see it is 0, which means stay powered off after power failure)
Write 0x20 to port 0x2F //Power on after power failure
Write 0xAA to port 0x2E //Exit extended function mode
After executing that code, your system will recover from a power failure. It needs to be run every boot. Unfortunately, this means that you will not be able to recover from power failures that occur before your code has a chance to run, unless Intel makes a BIOS update that moves this code to the startup.
The hardware option is to have a transistor and a simple timing circuit connected in parallel with the power switch. When you detect the 5VSB signal, generate a pulse that shorts the power switch lines for a few milliseconds. The system will boot if the switch is held closed while power is applied, so you can also use a normally-closed relay that holds the switch closed until the power good signal comes high. It's simpler, but you're looking at spending a few more dollars that way.
I do not know where you live but in my home town we get power failures all the time , I have a high end work station , so to protect it , I got a UPS . My unit normaly draws about 300 watts at idle , So I purchased a CyberPower 1500 with auto volt Reg. Happy Camper Now .
Yeah, I probably should have mentioned that solution for most applications... We ship industrial controllers that don't even have a power button that the user can press. If it is plugged in, it should be on. Because of this requirement we had to find other solutions to the power-on issue. The d510mo was a lot more forgiving, although it still seemed to rely on the power good signal dropping as a signal to write to that configuration register.
Amazing answer. I've never seen such an accurate and technical reply for a problem such as this.
In my case I never have power failures - I am cycling the power on purpose via a managed PDU to make the computer perform a reboot.
IIRC, it was only the PicoPSU 80 that exhibited this issue for me. The 90, 120, etc. did not.
I had a same issue. Client wanted a small mini itx build, that would turn on as soon as power was applied.
I have the "Mini-Box picoPSU-160-XT" purchased from Amazon. I used these with the D525MW board, and i could not get the system to turn on as soon as power was applied.
I stumbled upon these posts, and the reason as why it didn't made sense. I tried the boh relay options, and they worked, but i couldn't implement them into the small enclosure i had to provide to my customer.
So i contacted the manufacturer of the 160W picoPSU, and was told to remove "R16 from the PCB" R16 is located on the lower right hand side of the PCB. Image below shows the part i desoldered from the board. After removing, i installed the picoPSU, turned on the power to the PC, manually turned the PC on, then after the computer was loaded, i switched off power to the PC. I waited 10 seconds, then turned the power back on to the PC. The computer booted a couple seconds shortly thereafter. Hope this helps someone!