The problem here is in definition of smart cast. In kotlin smart cast means that for some instance we know better type(because of if checks or something like that). So, when we check, that cls == AppState::class.java then we know, that instance inside variable cls has type Class<AppState>.
Actually, after check cls == AppState::class.java we know, that generic parameter T is AppState and, because of this, TypeAdapter<AppState> is subtype of TypeAdapter<T>. But such analysis is complex and it is not just usual smart cast.
May be we implement it in far future, but not today.