As I addressed in the comments above the log is confusing and there is a PR to fix that.
I checked that the code works correctly though, observe:
rm -r output_dir; USE_TF=0 PYTHONPATH="../../src" ./finetune_trainer.py \
    --learning_rate=3e-5 \
    --fp16 \
    --do_train --do_eval --do_predict \
    --evaluation_strategy steps \
    --predict_with_generate \
    --n_train 150 \
    --n_val 30 \
    --n_test 10 \
    --num_train_epochs 1 \
    --data_dir "xsum" \
    --model_name_or_path "t5-small" \
    --output_dir output_dir \
    --per_device_train_batch_size 5 \
    --per_device_eval_batch_size 8\
    --task 'summarization' \
    --val_max_target_length 50 \
    --test_max_target_length 50 \
    --max_target_length 50

head -1 output_dir/test_generations.txt | wc -w
41

Now let’s set the limit to 5 tokens:
rm -r output_dir; USE_TF=0 PYTHONPATH="../../src" ./finetune_trainer.py \
    --learning_rate=3e-5 \
    --fp16 \
    --do_train --do_eval --do_predict \
    --evaluation_strategy steps \
    --predict_with_generate \
    --n_train 150 \
    --n_val 30 \
    --n_test 10 \
    --num_train_epochs 1 \
    --data_dir "xsum" \
    --model_name_or_path "t5-small" \
    --output_dir output_dir \
    --per_device_train_batch_size 5 \
    --per_device_eval_batch_size 8\
    --task 'summarization' \
    --val_max_target_length 5 \
    --test_max_target_length 5 \
    --max_target_length 5

head -1 output_dir/test_generations.txt | wc -w
4

As you can see  --val_max_target_length directly affects the length of the prediction sequence.

with 50 tokens max you got a 41 word summary
with 5 tokens max you got a 4 word summary

This makes sense to me if very common words are used and they are already in the dictionary as is or big parts of those words.
You can of course go into the code where the tokens are detokenized and print the length of generated tokens, you will most likely see that the max_length matches.
Please let me know whether these comparison runs address your question.