Interestingly, it looks like running USE SECONDARY ROLES NONE; may have solved the issue.
It looks like by default, secondary roles is set to ALL, which means that despite running things as TEST_ROLE, snowflake was really accessing the data via ACCOUNTADMIN which was a secondary role.