Eu sei que quando as VARCHAR(MAX)/NVARCHAR(MAX)colunas são usadas, os dados são armazenados fora da linha ...
Na verdade, isso depende da configuração da large value types out of rowopção, que pode ser definida usando sp_tableoption. A partir da documentação :

O padrão é que os MAXvalores sejam armazenados em linha , até 8000 bytes, se eles se ajustarem. A menos que você tenha usado sp_tableoptionpara alterar o padrão, seus MAXdados provavelmente serão armazenados em linha.
Dito isso, é uma prática ruim usar MAXtipos de dados para valores que nunca excederão 8000 bytes - use um tipo não MAX. Além de qualquer outra coisa, o desempenho costuma ser significativamente menor ao lidar com MAXtipos, porque o SQL Server deve estar preparado para lidar com dados que podem ter até 2 GB de tamanho.
Cada campo é armazenado fora da linha ou apenas no máximo?
Somente MAXos. Além disso, se uma MAXcoluna anteriormente na linha for movida para fora da linha, somente essa coluna nessa linha será afetada. É substituído na linha por um ponteiro para a LOBestrutura fora da linha . Há também circunstâncias em que colunas não MAX podem ser movidas para fora da linha.
Se você estiver usando o índice clusterizado da tabela para ler o registro inteiro, os campos armazenados fora da linha também serão lidos?
A varredura do índice clusterizado percorre apenas dados em linha. Se forem necessários dados fora da linha para a consulta, eles serão procurados usando o ponteiro na linha.