On reflection the answer was obvious, as telephony is in lower-case. For some reason this requires lower case even though upper case works in my uses-permission declarations. Here's the code which worked:
<uses-feature android:name="android.hardware.screen.portrait" android:required="false" />
<uses-feature android:name="android.hardware.telephony" android:required="false" />
<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-feature android:name="android.hardware.microphone" android:required="false" />
Hope this is helpful to someone else!