The basic meaning is the same, but they come from two different histories. "Half" has a Germanic history, whereas "semi" has a Latin background. We gained almost all our Latin-borrowings through French-speakers.
Sooooo... the result is that certain words tend to match up well with other words from the same background: halfway, halftime, and halfwit are all Anglo-Germanic. The words 'desert' and 'final' come to us via French/Latin, so "semi" fits them better.
This would be the good rule to apply. ;)