The second parameter to Read and Write are the offset within the array, not the offset within the file. Every time you read data you want to place it in the array starting from the first element, so that parameter value should be zero every time.

Also, the third parameter to Write is the number of bytes to write. You're trying to write 1024 every time but what if you didn't read 1024 bytes in the first place. I suggest that you change this:
VB Code:
  1. While True
  2.  
  3.                 bytesRead = compressedData.Read(buffer, offset, 1024)                           'Attempt a 1K read
  4.  
  5.                 If bytesRead = 0 Then                                                           'Fail if no data left
  6.                     Exit While
  7.                 End If
  8.  
  9.                 outData.Write(buffer, offset, 1024)                                             'Write the 1K to file
  10.  
  11.                 offset += bytesRead
  12.                 totalBytes += bytesRead
  13.             End While
to somethinglike this:
VB Code:
  1. bytesRead = compressedData.Read(buffer, 0, buffer.Length)
  2.  
  3. While bytesRead > 0
  4.     outData.Write(buffer, 0, bytesRead)
  5.     bytesRead = compressedData.Read(buffer, 0, buffer.Length)
  6. End While
Also, you don't need that Finally block at all. You should get to grips with the Using statement, which will implicitly dispose your objects whether there's an exception thrown or not.