Professor durante o acompanhamento de seu curso, fiz um pequena modificação na classe Produto. Removi a propriedade CategoriaId para manter a camada de negocio mais "limpa".
    public class Produto
    {
        public int Id { get; set; }
        public String Nome { get; set; }
        public float Preco { get; set; }
        public CategoriaDoProduto Categoria { get; set; }
        public String Descricao { get; set; }
        public int Quantidade { get; set; }
    }
Então modifiquei o código da view:
<select id="categoria" name="produto.Categoria">
    @foreach(var categoria in ViewBag.Categorias) 
    {
      <option value="@categoria">@categoria.Nome</option>
    }
  </select>
Mas agora o Model Binder não está conseguindo fazer a associação entre produto e categoria:
public ActionResult Adiciona(Produto produto)
{
    Alert(produto.Categoria.Nome);
//Quero que apresente o nome da categoria selecionada
    return View();
}
Teria como fazer essa associação funcionar sem modificar as classes de negócio?