Hola,
Yo utilizo el siguiente método y no me da ningun problema.
Respecto al tuyo veo alguna diferencia en el ContentType: Yo directamente indico un flujo de Bytes sin decir que es de MS Word (A mi me funciona así con Word, Excel, jpg...)
Tambien hago el Response.Clear() desde el principio y un Flush antes de escribir el fichero.
Código:
Private Sub descargarFichero(ByVal filepath As String, ByVal filename As String)
Response.Clear()
Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename)
Response.Flush()
Response.WriteFile(filepath)
Response.End()
End Sub
Espero que te funcione. Un Saludo