I do not know about Chameleon, but
pagetemplate distinguished between an HTML and an XML template. "empty element" is an HTML concept (more generally, you need a DTD to know about empty elements); XML tries to be usable without a DTD and then does not know about "empty elements". This implies that in an XML template the empty
source element looks like
<source /> or
Thus, Chameleon can be right, provided it has a good reason to treat your template as an XML template (most Plone templates are XHTML templates, which means XML templates).