This is not a bug, it's just not documented: you're calling Label(string expression, string labelText, object htmlAttributes) only with an expression.
Ultimately DefaultHtmlGenerator.GenerateLabel(... string expression, string labelText, ...) is called,
You only pass the expression, which is used to determine the for attribute of the rendered <label for="...">labelText</label>. This allows you to pass an expression that looks into your model in order to tie a label to a control belonging to a model property, for example:
@Html.Label("Foo.Bar", "Toggle Foo's Bar")
If you don't pass a label text, the entire expression is used as label text, unless it contains a dot: then everything after the dot.
So pass an empty expression as first argument, then the text:
@Html.Label("", "My.Cool.Label")