The motor drivers (SN754410, rated up to 36v) are connected directly to the power input.
The NXT motors are said to be “9v motors”, so I would not recommend using anything above 9.6v (8x 1.2v). According to some tests, 12v seems to work fine, but I don’t advise it.
Some sensors (the Lego NXT Ultrasonic sensor) requires 9v supply through sensor pin 1 (typically used as the analog input line). On the BrickPi, that 9v pullup circuit is connected directly to the power input (through a 1/4 watt 330 ohm resistor). Because of the voltage drop of the transistor, if you were to enable 9v pullup and accidentally ground the analog line, the highest safe voltage is about 9.7v (after which you would be going beyond the resistor’s rating of 1/4 watt).
The 5v regulator is also connected directly to the power input. There are two power versions of the BrickPi. One uses a linear regulator (LM7805, rated up to 35v), and one uses a switching regulator (LM2576, rated up to 40v).
With the linear regulator, the greater the difference between the input (e.g. 9.6v) and output (i.e. 5v) voltages, the more power it will need to dissipate (as heat), so the hotter it will get. The voltage difference (e.g. 4.6v) times the current consumption on the 5v output (e.g. 0.5A) equals the number of watts that need to be wasted as heat (e.g. 2.3w).
With the switching regulator, according to the lm2576 datasheet, the efficiency at 5v output is typically 82%. Compared to the linear regulator, there is a dramatic reduction of heat. At around 7.4v input, and about 500ma load, it get’s slightly warm to the touch, but not anywhere near hot.
So to sum it all up, the regulator heat (est. with the linear regulator), and what the motors are rated for, are the two biggest limiting factors for the input voltage.
9.6v is probably the highest I would use. I personally use a 7.2v RC “dynamite” battery pack, and it works very well for me.