The content/list fetch function is documented here: http://ez.no/ez_publish/documentation/reference/data_fetching/content/list
There's a heading "Class filtering" (they forgot to put it in bold though, but it's the paragraph after Filtering). There you'll see that you can use numerical IDs or class <b>identifiers</b>. So there's the reason for the difference between 'article' and 'Article'. An identifier is a stripped version of a name. The identifier is reliable for fetching, the name isn't.
'Article' is not an identifier, so the class filtering fails and returns everything. 'article' is the correct identifier of the Article class, so the filtering works.
You can see the identifiers in the class list in the admin interface. And yes, you can use your custom made classes in the same way. There's no difference for eZ publish.
I failed to follow the documentation down to the leaves of the tree.
It is still slightly counter-intuitive that the function returns ALL nodes if you ask for those belonging to a non-existant class. I would expect it to return no nodes at all.