That error occurs because roles were not really designed to be included dynamically like that, so the value is not run through the template engine. This is similar to the problem of using includes + with_* loops in v1, where the variables could come from an inventory source, which would lead to errors or unexpected behavior, as inventory sources are not available at the time the roles are parsed/loaded.
I would recommend using Oswaldo’s method, where available, or simple create more specific playbooks depending on your situation.