Hello Tiago,
that's strange. I've just tested on a pure CAS 7.3.1 instance and I couldn't reproduce the problem with a service template even there. I.e.:
1. I can see the expected merged definition via /actuator/registeredService - it contains "supportedProtocols": [ "java.util.HashSet", ["CAS20", "CAS30"] ].
2. When calling /validate ("CAS10"), I can see SERVICE_TICKET_VALIDATE_SUCCESS and then PROTOCOL_SPECIFICATION_VALIDATE_FAILED in the audit logs, and CAS server correctly returning "no".
Are you sure you don't have a) any other service definition matching the requests while testing, b) no customizations in this area? Otherwise, I can see no reason why CAS would show you the expected supportedProtocols, while not respecting them while processing the validation request.
If the problem doesn't go away, you can always try to
debug the CAS application and e.g. step over the Java lines I've sent previously.
Best regards
Petr