what is the correct method for upgrading an extension on a live site after pulling its updated code from a development site?
What I tend to do is:


if the upgrade is on my extensions page within the UI then I try
upgrading from the UI (obvioulsy on test first as you mention).
if there is no upgrade on my extension page, I tend to download a
release rather than link the production site directly to the master
branch on GitHub. I tend to do that only in test. I am sure there
are pros and cons for pulling directly but this is what I do.  
if the extension is a tiny one and I know for a fact the impact is
minimal I replace the extension directory with the extracted new release without disabling first.
if I know the extension is a bit bigger I will disable first, then extract and replace the extension directory and enable again.