Which is correct?
He promised that he will be home tomorrow.
He promised that he would have been home tomorrow.
Both sound wrong to me. I think you mean to use future in the past:
He promised he would be home tomorrow.
He promised he would have been home tomorrow, while not grammatically incorrect implies that the whole situation is hypothetical and I think it is unlikely that this 'unreal' meaning is what you want to express.
I cannot explain why I dislike promised ... will and COCA usage indicates that some people use it but promised ... would is far more common and should be preferred.
If you're distinguishing future from future perfect, that's really the difference between "will be" and "will have been". "would" is a different mood, and implies here a counterfactual: he promised that he would have been home tomorrow but he didn't come.
The future tense is correct. Tomorrow is the point where he will be home. It will not have been a completed action in the past at that point.
The first. That is:
He promised that he will be home tomorrow.
Often shortened to:
He promised [that] he'll be home tomorrow.
Would be seems to be the most suitable, here.
The sentences are examples of reported or indirect speech. It is common to backshift the tense of the verb in the reported clause. Example: He said: "I don't feel well" becomes He said he didn't feel well. It is permissible, however, not to backshift the tense if the reported clause is still true.
So, if he said to you earlier in the day "I will be home tomorrow", and you report what he said to a third person later on the same day, it is permissible to say He promised he will be home tomorrow.
In fact, if you are reporting what he said on a day after he said it, it would be usual to change "tomorrow" to "the following day" - and the backshift is mandatory:
He promised he would be home the following day.
I think "He promised that he will be home tomorrow." is the correct answer in the case spoken about because the futre situation spoken about has not passed yet (tomorrow).
However, where it becomes tricky is in the following example:
Is it better to say:
She promised she would call (but she didn't.)
She promised she would have called (but she didn't.)
Since she didn't call do you think the second sentence works grammatically?