Вы всегда должны использовать скобки в T4.
return record.Substring(offset, <#= length #>);
переводится в нечто вроде
Write("return record.Substring(offset, ");
Write(length);
Write(");");
Вот почему "else" выводит только первую часть.
Ваш код должен быть таким:
<#+ if (length == "0") { #>
return record.Substring(offset);
<#+ } else { #>
return record.Substring(offset, <#= length #>);
<#+ } #>