потому что 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);
			}
}