We are using the new credit system of the latest BOINC server code. It has quite complex algorithms and scales the credit according to statistical host and application performance. It's supposed to make sure credit is granted fairly (eventually as it learns averages).
This credit system is detailed at http://boinc.berkeley.edu/trac/wiki/CreditNew for those that are interested in technical details. It's the third credit system on that page.
We've had some problems that resulted in some results getting either too little (around 400cr) or too much (over 15kcr) for similar work. And yes, there was that "almost zero credit" incident too. :)
Some of our problems could be due to bugs in this new credit system or are result of our estimated and, especially, limit values for work units. I've increased the limit during early days (fixed the 400cr) and lowered it few days ago (should be at least a partial fix for the over 15kcr).
In addition to the standard credit calculation we now also have a partial crediting system in place (still need some edge cases fixed, though) that gives credit for tasks that haven't done the full amount of work in a work unit due to some local failure (CUDA errors, bugs in the dnet client. This partial credit is based on second task that was fully done and validated and is granted relative to the done vs. full work.