How can I monitor and log data connection mode and rate, and log with location?
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!