Take another look at the sentence:
The semicolon between dinner and yesterday is entirely correct. At this spot, there are two main clauses legally joined together. He can look into a nearly empty refrigerator ... begins the first main clause. He made a sliced pickle and mayonnaise sandwich ... is the next main clause. A semicolon is a strong enough mark of punctuation to join two main clauses.