Ok, I propose the following behavior:

For setting precedence, the following order is used (highest first):

1) Command line arguments
2) Configuration file settings
3) Defaults

Defaults (for config and datadir) are defined as:

datadir: ~/.bitcoin (or OS dependent equivalent)
config: datadir/bitcoin.conf

The wiki mentions that specifying datadir in the config file is unsupported, so this would be a change, but ultimately I think it would make the most sense in light of being able to change data directories without having to change startup scripts and whatnot.

If you guys like the sound of this, I'll put together a new PR with the changes and some tests...  (and with some cleanup wrt GetDataDir() implicitly creating the datadir)