Short answer: You will need to have the project owners fetch from base to their local (non-bare) repository and merge the bugfixes/updates from base into their projectx/master branch (or rebase their master onto base). From there they can push the updated projectx state back to the server for everyone else to use. (See git merging branches in a bare repository)
If I understand correctly, base is like a base class in an OO hierarchy, and the projects are like derived classes, automatically inheriting the changes to base, but implementing some things differently, correct? Otherwise, if it's more of a "base library with framework functions" type of situation, the way to go would be a seperate project that gets referenced (e.g. via submodules) by the other projects, as the comment under your question suggests.
What you seem to want is a sort of automatic bugfix integration from base into the projects, all in the bare repos on the server. This will not work, as git indicates with the error messages for merge/rebase ("This operation must be run in a work tree"), for a simple reason: Even if it could merge inside a repo, git can't guarantee there won't be conflicts during the merge (perhaps somebody already applied a different bugfix at the same location), and to resolve the merge conflict, you need to edit the affected file(s) by hand, for which you need a checked out working copy. Even if there are no conflicts, git would have to create a "temporary" working copy to apply the changes in and then commit it again. This is not how git works: The repo is only a collection of (compressed) snaphots of the project state at one point in time. You only add new snapshots to it, you don't modify the ones already inside. (Fetching into the bare projectx remote (as opposed to pulling) works because this only copies complete blobs and refs into the repository to make the fetched remote branches available, but does not modify existing ones.)
If you want a mostly automatic solution, you could employ a shell script that periodically fetches from base, merges the updates into the project, and pushes the updated project master to the server, if no merge conflicts have occurred during the process. I'd advise against this, though, as you will have problems if a "functional" conflict arises that isn't caught by the merge, in which case you'd have to stop the automatic script for as long as project is incompatible with the new changes from base. Depending on the likelyhood of this to happen, proceed with caution (in an unstable_updates branch or something).