For the most part, I use branches. On several rare occasions, I clone an entirely new client specific copy of the repository. The main point being, you want everything to stay 'related' so that merging and perhaps even cherry picking doesn't have to proverbially suck.
I follow the same rule that I follow when making a fork of any other open source project. If I need the project to go in a direction that most people involved would consider overly localized and specific to my own needs, I fork it. If the client's needs are digressing enough from the main effort, fork off another repository.
Otherwise, it is not at all uncommon to maintain branches for various architectures, so branches for particular clients that don't require you to deviate too far from the main development focus would serve basically the same thing.
Then again, there's nothing wrong with cloning one new repository per client. The point is, keep them all related so that your version control system helps you manage merges, bisections, tags and all of the other lovely things that we count on them to do.