I'm pretty sure this is generic behavior for any of the audio playback APIs,
not just OpenSL ES. To confirm, please try it with android.media.AudioTrack
and stream type STREAM_MUSIC (which is what OpenSL ES defaults to).
You can change the stream type in both android.media.AudioTrack and
OpenSL ES. For the latter, see section "Android configuration interface"
of <NDK>/docs/opensles/index.html
By the way, the details of the behavior of the volume keys is something that changes
fairly often in Android. The user interface designers have tried
several different approaches to volume management, looking for the perfect
balance of ease of use vs flexibility for power users.
It is actually a surprisingly difficult topic, far more complex
than one might imagine.