Mechanical requirements for Arduino compatibility
Depends on what you define as "Arduino compatible".

My "Arduino Nano" is 'Compatible' but a whole other design.

Or well, it already separates here.
"Software compatible" working with the Arduino IDE and/or Libraries. In general, any board with ATMega 328P / USB or ICSP / Bootloader could be considered compatible.

But, however, for an "Arduino clone" being "Hardware compatible" you could also look at:


Pin placement (Thus being compatible with shields).
Using the same FTDI chip, thus being directly compatible with arduino
drivers (not sure)
Using "exactly" same electronic specifications.
Size and/or shape or even weight of the board.


Strictly, moving the ICSP header will make it 'incompatible' for some shields.
But, well, for most shields it won't be a problem. For casings that have an opening for the ICSP header it'll mostly just look funny.
By replacing the ICSP header it might touch components of other shields/casings and thus be not compatible with it.



(update)
The website and file below are from the arduino site and could thus be considered to be the 'standard' as it's set by arduino. You can however make your board how you want it and compatible with what you want. But changes will often make it incompatible with (some) shields/adapters.

The arduino website with specifications on the board:
http://www.arduino.cc/en/Main/ArduinoBoardUno

EAGLE files:
http://arduino.cc/en/uploads/Main/arduino_Uno_Rev3-02-TH.zip