ok... ready for some HTML 101 fun?
When a page loads, the code is read by the browser from top to bottom, left to right. As each element is read, the browser responds to what needs to be done. Images are read as a file on a server someplace, so the URL has to be established and a call is made to the server to request the image.
Same thing happens for server based items like CSS files, JavaScripts - anything that is not coded directly into the page.
Your sites header image is part of your .header class in your CSS file. To get to it, the browser has to read down through the code, then request the CSS file from the server. Once it's loaded, it then has to read through the CSS file to find what needs to be done, pretty much like what it does with the HTML file.
All these things are taking place in parallel. While the CSS file is being served to the browser, and then read through, the browser is still able to work with the HTML file and request other images that it has more direct information on because they are in the HTML code versus the CSS. Because of this, requests can be made to the server for them sooner, so many times they load sooner than images that are located in the CSS file - like background images such as your header image.
Text needs nothing to load since it is directly in the HTML file. So, your header image, being a background image defined as part of a rule in a server based CSS file will always begin loading at least a bit after other things load. That's the order of things.
Now... down to image info from the homepage.
Your header image is 77K. Of the 5 CSS based images on the page, it's by far the biggest. The next biggest one is only 14K. All of your CSS images only total 95K, so really, all the others will likely load before your header regardless.
So through this long winded explanation, the page is pretty much setup to almost force the header to load like that.
Solutions? First, lighten up the weight of the header image. It looks great, but you can likely reduce the quality to bring the byte size down and still look good. Second, you may be able to achieve a similar effect by breaking the image up a bit. The text is graphic. You may be able to get the site name loaded as a separate graphic in the HTML header and then continue to load the remains of the header image as the background image. The text would need to be a transparent GIF or PNG for this to work. Also, would be good to load a background color behind it so the site name image could be seen nicely while waiting for the rest of the background image to load.
Another issue to consider is taht your total page load is HUGE! 2.1 MB for the page with 55 HTML images loading a total of 1.9 MB. That's a monster size page with a LOT of images. Pretty much ALL those HTML document images are in the queue to load before your header is, even though they are loading well below the fold. You have the blog set to load many posts, maybe reduce that to 5 posts max and that will reduce the number of image loads and help get the header image up there sooner.
I'm pooped.. that's all I got for now... hope this makes at least some sense...
if anybody is wondering where I got all this fun info, I just plugged the URL into this handy tool
Web Page Analyzer - free website optimization tool website speed test check website performance report from web site optimization