I happened to notice that React will throw Hooks can only be called inside the body of a function component if a sibling element calls ReactDOMServer.renderToStaticMarkup. I have a fiddle that shows this behavior (I think you need to manually open your console to see the error).
If you wrap the sibling element in a component or even just assign it a variable, this issue does not occur.
It's easy to get around and is a pretty specific bug, but why might this be happening?