The function `buildRow` returns a render array. You can put simple strings directly in the array, because later it will be put in another html structure like a table. An example from core, where it is used both ways (CommentTypeListBuilder.php):

    public function buildRow(EntityInterface $entity) {
        $row['type'] = $entity->label();
        $row['description']['data'] = ['#markup' => $entity->getDescription()];
        return $row + parent::buildRow($entity);
      }
So using the '#markup' element is optional. You can use it to be on the safe side, when you don't know how your render array is processed.

For complex elements you need a render element. The method view() would generates this:

    $row['email'] = $entity->email->view();

But this does not work. The problem seems to be in the custom entity. According to the error message there is a call to an undefined method `render`, which should be defined in `MyEntity`. Your entity does not know how to handle the email field.