Передача аргумента зависит от компилятора, если выполняются требования стандарта, но обычно фиктивный аргумент CHARACTER (len = *) будет иметь интерфейс, похожий на
void foo (char * s, int len)
и в реализации процедуры foo в качестве длины строки используется скрытый аргумент len. OTOH, для аргумента CHARACTER (len = somevalue) скрытый аргумент len либо игнорируется, либо вообще не передается, а код процедуры предполагает, что somevalue является правильной длиной строки.
Как вы уже видели, вы никогда не должны использовать ничего, кроме LEN = *, если вы действительно не знаете, что делаете, и не можете процитировать главу и стих из стандарта, чтобы объяснить, почему.