Is there a more elegant way of arranging my forms?
My bad, I think see now what you wanted. I just did not feel like reading your logic fully (too many details). After I did read it, I saw that you got the details right. All you needed was to stick your points into a list or enumerate over them, as in this example. This way, if you feel like adding more options - you can. Let me know if this works, so that I can delete the other answer.

private void Place_Form(Form formToPlaceNextTo, Form formToPlace)
{
    foreach (Point pointToTry in EnumerateFormPlacement(formToPlaceNextTo, formToPlace))
    {
        var rectToTry = new Rectangle(pointToTry.X, pointToTry.Y, formToPlace.Width, formtoPlace.Height);
        if (Screen.FromControl(formToPlace).WorkingArea.Contains(rectToTry))
        {
            formToPlace.Location = pointToTry;
            return;
        }
    }

    // Else no match, hence default location.
}

private IEnumerable&lt;Point&gt; EnumerateFormPlacement(Form formToPlaceNextTo, Form formToPlace)
{
    Point alignRightTop = new Point(
        formToPlaceNextTo.Location.X + formToPlaceNextTo.Width,
        formToPlaceNextTo.Location.Y);
    yield return alignRightTop;

    Point alignRightBottom = new Point(
        formToPlaceNextTo.Location.X + formToPlaceNextTo.Width, 
        (formToPlaceNextTo.Location.Y + formToPlaceNextTo.Height) - formToPlace.Height);
    yield return alignRightBottom;

    Point alignLeftTop = new Point(
        formToPlaceNextTo.Location.X - formToPlace.Width,
        formToPlaceNextTo.Location.Y);
    yield return alignLeftTop;

    Point alignLeftBottom = new Point(
        formToPlaceNextTo.Location.X - formToPlace.Width,
        (formToPlaceNextTo.Location.Y + formToPlaceNextTo.Height) - formToPlace.Height);
    yield return alignLeftBottom;
}