If there have been no "commits to the production branch yet" then the branch doesn't yet exist. In mercurial's named branches a branch name is an indelible label on a committed changeset. A changeset never changes what branch it's on. I'm going to assume you've got at least one changeset with the production branch label or this turns into a no-problem question.
If you take these actions I think you'll end up okay:
hg update to the revision you wish was the production head
hg branch production this just says the next commit should have the production label
hg commit you'll now have a new commit with the label production
Now when people do a clone of just production:
hg clone repopath#production
or
hg clone -r production repopath
or update to it
hg update production
They'll get the branch of development you want. That old changeset(s) will still (and always will) have the production label, but that's likely okay. If it's really not okay you could rebuild the repo and remove the labels from those commits, but the process above gets people cloning/updating production the right stuff, so you should be fine.