потому что computed это не функция, это свойство, хоть и с возможностью вычисления но все таки свойство. А свойство не может изменять сторонние переменные. Это не предусмотрено парадигмой vue. Если написать такое например в пхп шторме, он покажет ошибку, хотя и не критическую, но укажет что это косяк. Но в данно случае да, проблема не в этом.
Думаю вот так будет правильно работать (ватч не нужен)
computed:{
valid: function(){
check();
return this.pattern.test(this.v);
}
},
methods:{
check(){
if (this.v.length > this.max){
this.v = this.v.substr(0,this.max);
}
}