being hungry
The premise of your question is wrong (at least at the example “hungry”):
eng: Tom is hungry.
ger: Tom ist hungrig.
There is just an alternate way do express the same, which is:
ger: Tom hat Hunger.
There is also a literal translation of this sentence into english, but in English this construction is bad style. It is: “Tom has hunger.” Here “hunger” is a noun, it is the name of the feeling that Tom has. In German this construction is as common (or maybe even more common) then “Tom ist hungrig.”
being afraid
Just when talking about being afraid there is no is-construction in German, because German has no adjective that has exactly the same meaning as the english afraid. This is discussed in detail here: »Peter hatte angst« – Why do we use »hatte« instead of »war«?
being open
When you ask the owner of a shop, or one of his employees
How long are you open?
Then you literally ask how long the owner or employee is open, like as if there was an door in his body, that is open now, and will be closed sometimes. If you literally would ask for how long the shop is open, you would ask
eng: How long is your shop open?
ger: Wie lange ist Ihr Geschäft offen?
As you see, the correct German translation is in this case a word-by word translation.
But if you word-by-word translate “How long are you open?” then you get “Wie lange sind Sie offen?” (or “Wie lange bist du offen?”). This is a grammatically correct German sentence, but you are asking about the person being open, not about the shop.
So here we have the problem, that the english sentence has a transformed meaning, that the German word-by-word translation doesn't have.
When someone keeps his shop open, you say:
Herr Geiger hat sein Geschäft von 9:00 bis 19:00 Uhr geöffnet.
Herr Geiger hat sein Geschäft von 9:00 bis 19:00 Uhr offen.
You could translate this as “Mr. Geiger has his shop open(ed) from 9 a.m. to 7 p.m.” But I guess this is bad english (I'm not sure, English is a foreign language for me)
But when you ask in German
Wie lange haben Sie offen?
You also literally ask for how long the person has open. Literally you don't ask for the opening of the shop. But in this case (when you use “haben”) this will be understood as
Wie lange haben Sie Ihr Geschäft offen?
So in this case we have the same transformation of meaning, that works in English with “how long are you open”. And this is why we use “Wie lange haben Sie offen?” for what is in English “How long are you open?”
rules of thumb
As you can learn from those examples, the reasons of “being angry” = “Angst haben” and “being open” = “offen haben” are very different. They have nothing in common, so there is no rule of thumb for this.
(Just to say it again: “being hungry” = “hungrig sein”)