Для обработки POST ContentLength может быть 0, не полагайтесь на него. Просто откройте поток и прочитайте как можно больше, пока поток не вернет больше данных.
В остальном смещение при чтении в массив должно оставаться 0, поскольку это смещение массива, а не потока.
using (Stream receiveStream = response.GetResponseStream()) {
for (int offcnt = receiveStream.Read(trans, 0, trans.Length); offcnt > 0; offcnt = receiveStream.Read(trans, 0, trans.Length)) {
context.Response.OutputStream.Write(trans, 0, offcnt);
}
}