Implementing a binary operation for the null object pattern
The implementation of a NullRegion, shouldn't be done by a separate class, but by a static property of the same class.
If you overide Equals() and GetHashCode() you can just compare the objects to Region.NullRegion like  

public class Region
{
    private static readonly Region nullRegion = new Region();

    private Region()
    {
        Left = 0;
        Top = 0;
        Width = 0;
        Height = 0;
    }
    public Region(Point point, Size size)
    {
        Left = point.X;
        Top = point.Y;
        Width = size.Width;
        Height = size.Height;
    }
    public static Region NullRegion
    {
        get
        {
            return nullRegion;
        }

    }
    public int Left { get; set; }
    public int Top { get; set; }
    public int Width { get; set; }
    public int Height { get; set; }

    public Region Merge(Region other)
    {
        if (this == Region.NullRegion || other == Region.NullRegion)
        {
            return Region.NullRegion;
        }
        // default Merge() implementation here
    }
    public Region Intersects(Region other)
    {
        if (this == Region.NullRegion || other == Region.NullRegion)
        {
            return Region.NullRegion;
        }
        // default Intersects() implementation here

    }
    public override bool Equals(object obj)
    {
        //Implementation of your Equals() here
        return base.Equals(obj);
    }
    public override int GetHashCode()
    {
        //Implementation of your GetHashCode() here
        return base.GetHashCode();
    }
}