After you release your software, the version number should be incremented immediately.
Why?
You will be creating multiple builds during development. Each build is a development snapshot of your next release. It makes sense to use the same version for your development and release builds. The version indicates what release you're working toward.
If you're preparing for release and the software passes all of its tests, you won't want to rebuild and retest the software just because you had to update the version.
Assuming you're following a scheme like Semantic Versioning you probably have a build number in the version. So you might have [Major].[Minor].[Patch].[Build]. When you make a release, you are stating that "build 1.1.0.23" shall henceforth be referred to as "version 1.1.0".
The increment-after-release model makes sense for branching too. Suppose you have a mainline development branch, and you create maintenance branches for releases. The moment you create your release branch, your development branch is no longer linked to that release's version number. The development branch contains code that is part of the next version number.