У вас условие написано
ЕСЛИ before.channel существует И after.channel НЕ существует.
Получается что данное условие сработает только тогда, когда пользователь не перейдёт в другой канал, а выйдет вообще из голосового канала, поэтому роль и не снимается при переходе в другой канал.
Правильнее будет проверять только лишь наличие before.channel и сравнивать его id с желаемым и если совпадает, то снимать роль, а куда ушёл пользователь вам уже всё равно.
Т.е.
@client.event
async def on_voice_state_update(member, before, after):
role1 = discord.utils.get(member.guild.roles, id = 804852310966140978)
if before.channel:
if before.channel.id == 804901448931475506:
await member.remove_roles(role1)