Await and interactive Android ADB shell
MemoryStream ms = _Remaining == null ? new MemoryStream() : _Remaining;


This is exactly what the null-coalescing operator is for:

MemoryStream ms = _Remaining ?? new MemoryStream();




int count = await _Process.StandardOutput.BaseStream.ReadAsync(_Buffer, 0, _Buffer.Length);


Why are you using BaseStream? Without it, you could work directly with chars instead of bytes, which saves you having to use Encoding to convert those bytes back to string.




  Is there something I can reliably do to keep from creating new MemoryStreams?


Yes: don't use MemoryStream at all. Instead, I would use StringBuilder, since it allows you to remove characters from its start, which is exactly what you need. As an added advantage, it works with chars, not bytes.




  Is there an entirely better way to do it than using async and await?


Your use of async-await seems reasonable to me. Though I'm not sure it's actually necessary: I think synchronous methods would have worked just as well.