fluxcondensator If it is implemented correctly, which I hope, using the same password for different profiles should be safe. The password is used to derive an encryption key, which is then used to decrypt the actual file encryption key. Only that file encryption key should be kept loaded in memory, the password and the derived encryption key should be zeroed from memory again once the real file encryption key has been decrypted and loaded.
The fact that GrapheneOS uses a hardware component for key derivation does not change this. What happens in GrapheneOS is that the password is used to derive a hash value for unlocking the weaver slot value from the hardware, which is then mixed in to derive the key used to decrypt the file encryption key. If the Titan chip is totally compromised, all an attacker can do is get hold of all weaver slot values. But the hash of the password that is used to authenticate with a weaver slot is not the same hash of the password that is used to derive the decryption key, and since hashes are cryptographically impossible to reverse, it is not possible to derive the decryption key without knowing the actual password.
Super simplified and slightly inaccurate since from my memory:
token = SCRYPT(password)
weaver_value = GET_FROM_TITAN(slot=userid, auth_key=HASH("auth_key" | token))
decrypt_key = HASH("decrypt_key" | token | weaver_value)
file_encryption_key = AES_DECRYPT(key=decrypt_key, data=encrypted_file_encryption_key_read_from_disk)