Here's a bit of an update to this one, based on work I did over the weekend.
The original discovery rules I had in place had different SNMPv3 'auth' and 'priv' passwords. I changed the passwords to line up, and SNMPv3 based discovery seems to be working now.
Secondly, in the Zabbix source tree, specifically in src/zabbix_server/poller/checks_snmp.c, in the get_snmp function I changed the code that returns NETWORK_ERROR to return NOTSUPPORTED. I know this is a hacky fix (if the device goes down I'm going to have queue backups) but I wanted to see if I could get SNMPv3 based low level discovery working.
This is the resulting code I now have running:
else if (STAT_TIMEOUT == status)
SET_MSG_RESULT(value, zbx_dsprintf(NULL, "get_snmp: Timeout while connecting to [[%s]:%d]",
/* ret = NETWORK_ERROR; */
ret = NOTSUPPORTED;
Making my auth and priv SNMPv3 passwords match, and commenting out the NETWORK_ERROR return value and replacing it with NOTSUPPORTED in the get_snmp function has SNMPv3 low level discovery and polling working flawlessly for me on two Cisco 6509 switches with close to 2,000 (!) items