The problem is that ...
Er soll gut Englisch sprechen
... can mean two things in German: 1) He speaks good English (they say) and 2) He should be speaking good English (he's been in the country for a few years, after all).
This is really not all that different from the English "He's supposed to speak good English", though, is it?
Is there a compact way of translating this into German, or is it necessary to change the sentences to be more explicit in meaning?
Yes, I think you'd have to reword slightly to remove any ambiguities. A few examples:
Eigentlich sollte er gut Englisch sprechen (but for some reason he does not)
Ich nehme an, dass er gut Englisch spricht (but I don't know for sure)
Angeblich spricht er gut Englisch (or so I've heard)