Q: Symfony expecting an ArrayCollection for a single-entity attribute I have entity called "Post": 
/**
 * @ORM\Entity(repositoryClass="App\Repository\PostRepository")
 */
class Post
{

/**
 * @ORM\Id()
 * @ORM\GeneratedValue()
 * @ORM\Column(type="integer")
 */
private $id;

/**
 * @ORM\Column(type="text", nullable=true)
 */
private $content;

/**
 * @ORM\ManyToOne(targetEntity="UserSubscriptionTier", inversedBy="posts")
 * @Assert\NotBlank()
 *
 */
private $subscriptionTier;

... and all the various get/set functions 

}

So my main point here is that the $subscriptionTier is not a collection object, but merely a single-entity attribute.
Here is what the form type class looks like: 
class PostType extends AbstractType
{
    /**
     * @var UserProvider
     */
    protected $userProvider;
public function __construct(UserProvider $userProvider)
{
    $this->userProvider = $userProvider;
}

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('file', FileType::class, [
            'label' => 'File or Files',
            'required' => false,
            'mapped'   => false,
            'multiple' => true,
            'attr'=>array('style'=>'display:none;')
        ])
        ->add('content', TextareaType::class, [
            'required' => false
        ])
        ->add('subscriptionTier', EntityType::class, [
            'class' => UserSubscriptionTier::class,
            'choices'  => $this->userProvider->getCurrentUser()->getSubscriptionTiers(),
            'choice_label' => 'name',
            'required' => false,
            'multiple' => true,
            'expanded' => true
        ])
        ->add('save', SubmitType::class, array(
            'attr' => array('class' => 'save')
        ))
    ;
}

So the subscriptionTier is simply a single entity attribute, with a bunch of options to select from. 
Here is what it looks like when I build it out in twig, from the incoming form: 
<select class="custom-select" name="subscriptions" required="required">
    <option disabled selected>Visibility</option>
        {% for key,val in postForm.subscriptionTier.vars.choices %}
            {% if val.data.tierNumber == 1 %}
            <option value="{{ val.value }}" {{  postForm.subscriptionTier.vars.value == '' and key == 0 ? ' selected ' :(val.value == postForm.subscriptionTier.vars.value ? ' selected ' : '') }}>All Subscribers</option>
            {% endif %}
            <option value="{{ val.value }}" {{ postForm.subscriptionTier.vars.value == '' and key == 0 ? ' selected ' :(val.value == postForm.subscriptionTier.vars.value ? ' selected ' : '') }}>{{ val.label | trans }}</option>
        {% endfor %}
</select>

Here is the controller code after the form is submitted: 
public function createPostAction(PostRepository $postRepository, Request $request)
    {
        $user = $this->getUser();
        $subscriptionId = $request->request->get('subscriptions');
        $userSubscriptionTier = $this->subscriptionTierRepository->find($subscriptionId);

        $post = new Post();
        $post->setUser($user);
        $post->setSubscriptionTier($userSubscriptionTier);
        $form = $this->createForm(PostType::class, $post);

It is this createForm function which triggers the following error: 
Unable to transform value for property path "subscriptionTier": Expected a Doctrine\Common\Collections\Collection object.

Why is Symfony expecting a collections object for a single entity attribute?  Did the multi-option choice in the form trick Symfony into expecting an ArrayCollection? 

A: Not 100% sure but isn't it because of the 'multiple' => true here:
->add('subscriptionTier', EntityType::class, [
        'class' => UserSubscriptionTier::class,
        'choices'  => $this->userProvider->getCurrentUser()->getSubscriptionTiers(),
        'choice_label' => 'name',
        'required' => false,
        'multiple' => true,
        'expanded' => true
    ])

I think it creates mutli-value select, which is expected to pass a collection with multiple values.
Here's what the docs say about this field:

multiple
  type: boolean default: false
If true, the user will be able to select multiple options (as opposed to choosing just one option). Depending on the value of the expanded option, this will render either a select tag or checkboxes if true and a select tag or radio buttons if false. The returned value will be an array.

Strange thing is your twig output doesn't contain a select with "multiple" on it, so I'm a bit confused, but it's worth a try.
