IMO, SLOCs is a useful metric, when used properly.
We don't use it to measure individual programmer productivity (in fact, there is no such measurement at all used by the company, I do, however, occasionally try to estimate whether we are doing good, in the projects I manage).
However, occasionally during a project, just to see how well we are doing, I compare the team's total output over a given period of time with the total SLOCs. If we're below 1000, I usually discuss this with the team, since I think we have a problem.
What makes this dreaded metric usable for us? The team is stable, people are working highly collaborative, and we mostly work based on pretty detailed designs done ahead of coding. As such, individual programmers don't have much influence on the program's architecture (at coding time, coding doesn't start until programmers are happy with the design). Since there's not much room for improvement on an existing design, other than changing the design itself, programmer effort is pretty much proportional to SLOCs, productivity isn't assessed for individuals but for teams, and code quality problems are treated as a much larger problem than productivity, SLOCs are a proper metric for assessing overall team productivity.
Essentially, I think that SLOCs are a good metric for programmer productivity only when being able to strongly control code quality by other means, when it isn't applied to individuals and when individual programmers have little influence on design, or the influence of design on productivity should not be factored into the productivity estimation.