Должно работать как то так. Т.е. делаем отдельный сценарий на обновление. Потом при валидации по этому сценарию вызываем валидацию, если аттрибут поменялся.
[['username'], 'unique', 'on'=>'update', 'when' => function($model){
return $model->isAttributeChanged('username')
}],