Thus I expected naively that pip install . and python setup.py install should have the same results.

they process install_requires with different code, so things could turn out differently.  

 
I have a reproducible case when the dependency handling differs if you use pip install -r requirements.txt or when you use python setup.py install
https://github.com/zeromq/pyzmq/issues/414#issuecomment-24679800

I looked at this case, but atleast for me, the results were the same in all 3 cases
(note that this project splits requirements.txt to generate 'install_requires')
1) python setup.py install
2) pip install . 
3) pip install -r requirements.txt

from "pip list" after the installs:
anyjson (0.3.3)
configparser (3.3.0r2)
coverage (3.6)
docutils (0.11)
Jinja2 (2.7.1)
MarkupSafe (0.18)
picomongo (0.6)
Pygments (1.6)
pymongo (2.6.2)
pyzmq (13.1.0)
satlive (0.8.0)
Sphinx (1.2b2)

btw, pip<1.4 has a bug where a stale build directory can lead to unexpected results.
check for the offending project in <venv>/build (if using a virtualenv), or if using a global python   /tmp/pip-build-<username>