While we're waiting for the SE devs to come up with a proper fix, I managed to find a user script workaround.
Basically, the problem is that the "corral"
<div> that the menus are loaded into is separate from and, in particular, located before the menu icons themselves in the DOM. That's why you have to use Shift+Tab to reach them — as far as the browser is concerned, they are logically above the menu icons in the tabbing order.
The fix is to relocate each menu
<div> immediately after the icon that opens it, allowing you to tab into it as you'd expect, like this:
Perhaps surprisingly, this doesn't break the UI in any way, since the menus are absolutely positioned, and thus outside the normal document flow.
One minor complication, for doing this in a user script, is that the inbox and achievement menus are dynamically loaded via AJAX, and so don't exist when the page is initially loaded. The solution I'm using is the hook into the jQuery AJAX loading system via
$(document).ajaxSuccess and re-run the code above after each menu is loaded.
Another complication is that the relocation breaks an assumption in the click handler that's meant to close the menus whenever the user clicks anything outside the corral. I managed to solve that by
adding my own click handler that stops any click events on the menus from propagating that far digging into jQuery's guts to rip out the SE click handler and replace it with my own, because jQuery doesn't bubble middle/right mouse button clicks properly. :-(
Anyway, I've included the fix described above in a collection of small user script fixes that I'm calling the Stack Overflow Unofficial Patch. Please feel welcome to give it a try!
Edit: Note that this is only a partial fix — it only fixes the left-hand menus (site switcher, inbox and announcements), but not the right-hand ones (help and moderator inbox). I may try to fix those later, but it's somewhat complicated by the fact that those menu icons are themselves inside an absolutely positioned element.