What's happening when Arduino Micro runs the bootloader?

Background:
Apparently a new (?) feature of the Leonardo and the Micro is that upon power-up, the bootloader is bypassed, and the setup loop is accessed immediately. When the resent button is pressed, the bootloader runs before the setup loop runs.

Problem:
I have my Arduino controlling a DAC (AD5754R, datasheet here http://www.analog.com/static/imported-files/data_sheets/AD5724R_5734R_5754R.pdf), via SPI interface. When I power up the Arduino via USB connection to my PC, the DAC doesn't respond. But after I press the Arduino's reset button, everything works fine. Is there something happening because the bootloader is running? I never had this problem until I recently ordered a new Arduino Micro.

Here's some of the relevant code from my setup loop:

void setup(){
  //Enable SPI
  SPI.setClockDivider( SPI_CLOCK_DIV128 ); // slow the SPI bus down
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE0);    // SPI 0,0
  SPI.begin();
 
  delay(100);
  //Code for initializing the DAC upon power-up, manipulates the on-board control registers
  write_to_DAC(B00010000,B00000000,B00011111);      //powers up all four DAC channels and internal reference
  delayMicroseconds(11);
  write_to_DAC(B00001100,B00000000,B00000011);    //sets DAC channels to +/-5V range
  write_to_DAC(B00011001,B00000000,B00001101);      //Enable Thermal Protection, overcurrent clamp, disable SDO
}

//Here's the function I call in the setup loop.  All it does is push three bytes out on the SPI MISO wire
void write_to_DAC(byte byte1, byte byte2, byte byte3){
  PORTC&=B01111111;                        //Brings the DAC's slave select pin low
  SPI.transfer(byte1);
  SPI.transfer(byte2);
  SPI.transfer(byte3);
  PORTC|=B10000000;                  //Brings the DAC's slave select pin high
}

This is a total guess, but could it be a race condition between the hardware finishing its power-up initialisation, and the Arduino sketch trying to access it? If so, perhaps a short delay in setup() would be enough to avoid the problem.

I think the micro behaves like the Leonardo and usually there is a while (! Serial); line to wait until the Serial port is established.

Serial.begin(57600);
  while (! Serial);

Might that help?

...R