The problem was that I had an overeager HttpInterceptor that was converting all HTTP error responses into a string.
The intercepter was simply returning:
err.statusText
Which was why I only saw a string, not an HttpErrorResponse object.