Olá Lucas.
O conceito está quase correto:
Utilizamos o delimitador {{}} quando desejamos exibir o valor de uma variável e o delimitador {%%} quando desejamos executar algum trecho de código Python.
O que faltou no entendimento foi a condição de execução do código.
Apesar de dizermos que o delimitador {%%} é utilizado para executar código Python e o delimitador {{}} é utilizado para exibir o valor de variáveis, não significa que no segundo caso o código não esteja sendo executado.
A diferença aqui é que quando o delimitador {{}} é utilizado, estamos dizendo explicitamente ao interpretador que queremos que o resultado daquele código seja exibido no navegador.
Dessa forma, a maneira correta de exibir o tamanho da lista ['String1', 'String2'] é {{ len(lista) }}, pois assim dizemos explicitamente ao interpretador que o valor desse trecho de código deve ser exibido.
Espero ter ajudado.
Caso tenha alguma dúvida, não exite em perguntar.