It's exactly as e12e describes: if you've had the page open for a while, and click an upvote, then the arrow disappears and it looks like you have voted.
But if you refresh the page, you'll see that the arrow is still there. If you upvote now, on this fresh page, the upvote is counted - you can tell, because if you refresh the page now, the arrow will be gone. (This proves to me that I haven't been disenfranchised or banned in some way - I can vote, it just has to be on a fresh page.)
I get the same behaviour on both firefox desktop, and the stock android browser.
Why not try it, and see if you get the same behaviour?
Of course, I don't know the details of how HN implements voting - it just behaves as if the link expires in some way...
For a regular link on HN, if you leave it too long, it will explicitly say "link expired". But for upvotes, you don't see that message (presumably it is what gets returned to the up arrow though).