Finalmente encontrei o problema. É uma coisa da linguagem Go, não uma coisa do Ubuntu One.
Aparentemente, o campo request.ContentLength
precisa ser definido corretamente:
request.Header.Add("Content-Type", "application/octet-stream")
request.ContentLength = n.Size
response, _ := http.DefaultClient.Do(request)
Pode parecer óbvio em retrospecto (não realmente porque estava funcionando bem para arquivos menores que 16304 ...), mas eu não vi isso documentado no documento Go.
Espero que isso seja útil para alguém que, em algum momento, tenha um problema semelhante.