If you look at the call stack for the two times the property is accessed you will see the second one goes through a function called UpdateDimensionsToRestoreBounds. Doing a web search on this led me here
The comment on this function says that when the window is maximised or minimised the intent is to have the property hold the value when not maximised or minimised. It looks like this is the reason for the two calls, the second is to set the values they will be when not maximised or minimised.
If you want to know the height of the window you can use
double renderedHeight = Application.Current.MainWindow.ActualHeight;
Hope this helps