I figured it out! I accidentally did something weird. When I built NumPy and SciPy, I used the --user option to tell distutils to build them in my home directory. I had not realized that --user installs the packages in ~/.local/lib/python2.7/site-packages/. I was assuming they would be installed in ~/lib/python2.7/site-packages, but I didn't notice they were "missing" until just now. When I reinstalled NumPy and Scipy using the option --prefix=/home/cfinch and then rebuilt matplotlib, everything started working. I didn't have to rebuild pycairo or pygtk; I just had to get everything in the same location. This is the first I've heard of installing anything in a .local directory...why is that even an option???
Thanks for your