I found the solution. The reason I was getting empty files in my zip archive was that the position of the memory stream at the time I'm adding the entries to the zip archive is at the end of the stream. When I pointed the memory stream back to the beginning of the stream right before adding the entries it works like a charm. Revised code (including streaming the zip archive to the client):
Dim CLdoc As New Document("C:/Temp/Cover Letter.docx")
Dim CLbuilder As New DocumentBuilder(CLdoc)
'Build CLDoc content
Dim MTdoc As New Document("C:/Temp/Master Terms.docx")
Dim MTbuilder As New DocumentBuilder(MTdoc)
'Build MTDoc content
Dim CLDocStream As New MemoryStream
Dim MTDocStream As New MemoryStream
CLdoc.Save(CLDocStream, SaveFormat.docx)
MTdoc.Save(MTDocStream, SaveFormat.docx)
CLDocStream.Seek(0, SeekOrigin.Begin)
MTDocStream.Seek(0, SeekOrigin.Begin)
Dim ZipStream As New MemoryStream()
Response.Clear()
Response.ContentType = "application/zip"
Response.AddHeader("Content-Disposition", "attachment;filename=Docs.zip")
Using zip1 As New ZipFile()
zip1.AddEntry("CL.docx", CLDocStream)
zip1.AddEntry("MT.docx", MTDocStream)
zip1.Save(Response.OutputStream)
End Using
ZipStream.WriteTo(Response.OutputStream)
Response.End()