The behaviour you observed has to do with the way language parsers are constructed.
To put it in simple terms, the LHS (Left Hand Side) of an expression has to be a variable
The RHS (Right Hand Side) may be a variable or a constant or another expression.
With that understood, you can see that you were supplying an expression as the LHS of your statement
<cms:if "<cms:date k_page_date format='Y-m-d' />" ge "<cms:date format='Y-m-d' />" >
The right way could be first placing the result of the expression into a variable and then using it as LHS:
<cms:set compare_event_date="<cms:date k_page_date format='Y-m-d' />" />
<cms:if compare_event_date ge "<cms:date format='Y-m-d' />" >
Sorry for all that developer-parlance
Hope this helps.