In two different production environments, running ConfigMgr Current Branch (1511), I have seen the "Failed to find a valid network adapter" error happening when starting a bare metal deployment. In both environments the machines did get an IP address, and pretty quickly too, but apparently not quickly enough for ConfigMgr.
The full error is: Failed to find a valid network adapter. Please ensure that this machine has a network adapter and appropiate network drivers.
Unspecified error (Error: 80004005; Source: Windows)
Note: Yes, there is a spelling error in the log (appropiate), it's not because of my fat fingers 🙂

Fixing it
In my first attempt to fix the issue, I simply created a VBScript with a wait (10 seconds), and called it via the ConfigMgr prestart command feature (creating a TSCONFIG.INI file in the root of the boot image that called the script). But that didn't work out since the timeout actually happens before the prestart command is run.
However, there is another method to call a job in WinPE, before the ConfigMgr prestart command, and that is using an Unattend.xml file instead. So I simply put the following Unattend.xml in the root of the boot image, and copied the WaitForNetwork.vbs script with the wait in it, to the DeployScripts folder of my boot image.
Unattend.xml
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowsPE">
<component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State">
<RunSynchronous>
<RunSynchronousCommand wcm:action="add">
<Description>Lite Touch PE</Description>
<Order>1</Order>
<Path>wscript.exe X:\Deploy\Scripts\WaitForNetwork.vbs</Path>
</RunSynchronousCommand>
</RunSynchronous>
</component>
</settings>
</unattend>
WaitForNetwork.vbs
wscript.sleep 10000