How can I monitor and log data connection mode and rate, and log with location? I would like to understand what connection type and theoretical data rate my phone is using for its data connection, and how it changes with different locations.  I'm not looking for an actual data speed test like speedtest.net, but rather a logging of the type of data connection (GPRS, HSDPA, HSDPA+) and the specific modulation and UE Categories (see the table for User Equipment (UE) categories in this article).  

This information should be available from the phone's radio, without actually sending additional data through the network. 

I would like to have this information logged, along with a rough location, maybe as a background process (which would only run when a data connection is active so it would not drain the battery).
I think that the network data you need is available through logcat. View the network buffer on your phone using either alogcat (Android 4.0 and earlier) or adb (any, but required for Android 4.1 and later). I had to use this statement in adb:

adb logcat -b radio GsmSST:D *:S


The resulting list included log entries like the one below:

D/GsmSST  (  707): [GsmSST] handlPollStateResultMessage: GsmSST setDataRegState=0 regState=1 dataRadioTechnology=9


This is from a Galaxy Nexus which is GSM - if your phone is CDMA it will look very different and will need a different adb command. Note the dataRadioTechnologyportion. Do a little testing to work out what the numbers mean (my Google-foo isn't working well enough to find the answer online).

Then, all you need to do is track your location using whatever method you like. Correlate the logcat output with your location logs using timestamps and see what you get!