I believe that it has to do with the fact that as is not a generic function, such as mean:
R> mean
function (x, ...)
UseMethod("mean")
<bytecode: 0x000000000a617ed0>
<environment: namespace:base>
Since it's not a generic, there is no call to method dispatch (ie UseMethod)
On the other hand, as.data.frame is a generic function-- see methods(class= "data.frame") or the source for as.data.frame
If there was method dispatch on as, your assumption "that the latter would convert to the former" would be correct. Since as is not a generic function, your assumption is wrong.
If you look at the source code to as, you see that it's essentially a call to a number of if-else cases instead of a call to method dispatch. On line 52, you see the catch that returns your error:
if (is.null(asMethod))
stop(gettextf("no method or default for coercing %s to %s",
dQuote(thisClass), dQuote(Class)), domain = NA)
Which gives the return that you see.