I'll be installing a couple of projects from github on our servers, and adding some features.
So you take source code from github and improve it...
Should I create a repository on our server (e.g. in /opt/git/), add the github project as a remote, and create a branch?
You can certainly do that. Why would you want to keep it on your server though? (Is it not worth to be open because it's highly company specific stuff? Is it closed intentionally because it would reveal core company secrets? Is it just for backup, because you don't trust githubs uptime?) Having 2 remotes (github and your server) makes the workflow slightly more complicated, but if you don't mind a complicated workflow that's no problem. But be sure to know why/what benefits you gain from that. You could also go with your github fork, which could be set to private, I'd guess.
Then on my local machine add our server as the remote and then pull / push with that?
Sure, sounds fine.
On the server there will be two web directories: stable and dev. I was planning for these to be branches, and then just pull from the server repository using the local protocol.
Beware of that. There are quite a lot of servers serving the contents of the .git directory, you may or may not want to expose the history. (Certainly it looks odd)
For a private server I'd have the git directory somewhere non-public (outside of /var/www, so maybe in the home directory of the git user) and then a hook like this:
$cat .git/hooks/post-update
GIT_WORK_TREE=/var/www/your-stable-web-dir git checkout stable-branch
GIT_WORK_TREE=/var/www/your-dev-web-dir git checkout dev-branch
That's one way to do it. And outdated by now (as I just wrote down the config I have in a personal server).
Git has learned a push-to-deploy (https://github.com/blog/1994-git-2-4-atomic-pushes-push-to-deploy-and-more ), which should do what you want there, too.