If a variable say "foo " is decalred to be in application scope then an expression ${foo} returns the value. Ideally it should be "${applicationScope.foo}" This would in conformation with pageContext.getAttribute("var" ,Scope)
Not a bug; this is specified behavior. See section A.5: "The EL evaluates an identifier by looking up its value as an attribute, according to the behavior of PageContext.findAttribute(String)."