Deviation of power consumption between datasheet and real world?
According to the datasheet:


  All current consumption measurements are performed with all I/O pins configured as inputs and with internal pull-ups enabled.




That was the critical point. Trying this sketch:

int main ()
  {
  for (int i = 0; i &lt; 20; i++)
    pinMode (i, INPUT_PULLUP);
  }  // end of setup


Note that timers are not running (your sketch would have timer 0 running):

With that sketch, even using the crystal and capacitors (I actually had a resonator) the consumption at 5 V at around 20 °C was 9.2 mA which is within spec.

Fuses:



Signature = 0x1E 0x95 0x0F 
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF 
HFuse = 0xDF 
EFuse = 0xFF 
Lock byte = 0xFF 
Clock calibration = 0x96 






If we turn pull-ups off:

int main ()
  {
  }  // end of setup


Now it consumes 14.4 mA, closer to what you measured.



And with your actual test sketch:

void setup () {}
void loop () {}


It consumes 15.5 mA, which is more, because Timer 0 is running (started in the init function). It is also close to what I had on my page about power - 15.15 mA.



So, working as expected. Those pull-ups are important, to stop the input drivers consuming current.

I did mention further down in my page the importance of configuring the pins:


  Testing in SLEEP_MODE_PWR_DOWN:
  
  
  All pins as outputs, and LOW: 0.35 µA (same as before).
  All pins as outputs, and HIGH: 1.86 µA.
  All pins as inputs, and LOW (in other words, internal pull-ups disabled): 0.35 µA (same as before).
  All pins as inputs, and HIGH (in other words, internal pull-ups enabled): 1.25 µA.
  


Notice the difference there of 0.9 µA when asleep. It would appear that there is an ever greater difference if the processor is awake.