Another way of looking at this problem is to consider the tools from discrete inverse problems, that is, problems which involve solving Ax=b or min||Ax−b||2 where A is very ill-conditioned (i.e. the ratio between the first and last singular value σ1/σn is large).
Here, we have several methods for choosing the stopping criterion, and for an iterative method, I would recommend the L-curve criterion since it only involves quantities that are available already (DISCLAIMER: My advisor pioneered this method, so I am definitely biased towards it). I have used this with success in an iterative method.
The idea is to monitor the residual norm ρk=||Axk−b||2 and the solution norm ηk=||xk||2, where xk is the k'th iterate. As you iterate, this begins to draw the shape of an L in a loglog(rho,eta) plot, and the point at the corner of that L is the optimal choice.
This allows you to implement a criterion where you keep an eye on when you have passed the corner (i.e. looking at the gradient of (ρk,ηk)), and then choose the iterate that was located at the corner.
The way I did it involved storing the last 20 iterates, and if the gradient abs(log(ηk)−log(ηk−1)log(ρk)−log(ρk−1)) was larger than some threshold for 20 successive iterations, I knew that I was on the vertical part of the curve and that I had passed the corner. I then took the first iterate in my array (i.e. the one 20 iterations ago) as my solution.
There are also more detailed methods for finding the corner, and these work better but require storing a significant number of iterates. Play around with it a bit. If you are in matlab, you can use the toolbox Regularization Tools, which implements some of this (specifically the "corner" function is applicable).
Note that this approach is particularly suitable for large-scale problems, since the extra computing time involved is minuscule.