The Elm Architecture encourages consistent naming of types like Model and Msg to convey their meaning. The use of lowercase msg just makes it a little more clear what the intention is.
It very well could have been named a, but that arguably doesn't convey as much information.
Edit
To elaborate a bit more, consider the documentation for the elm-lang/html package.
Let's take a look at the definition of Html.program:
program :
{ init : (model, Cmd msg)
, update : msg -> model -> (model, Cmd msg)
, subscriptions : model -> Sub msg
, view : model -> Html msg
} -> Program Never model msg
The Elm Architecture outlines very clear intentions of how your Model and Msg types are to be used by the framework to carry state and indicate what actions are to be performed. By using lowercase msg and model consistently through the documentation, it becomes much easier to understand what goes where.
Consider the alternative of a more Haskellesque approach where the type parameters are often abbreviated starting at a:
program :
{ init : (a, Cmd b)
, update : b -> a -> (a, Cmd b)
, subscriptions : a -> Sub b
, view : a -> Html b
} -> Program Never a b
That definition is every bit as valid, but I would argue that it is not nearly as explanatory as the documentation for program, which offers strong hints about where your Msg and Model types are to go.