Optimizing location updates when adding a new object
The method GetMachinesByOrderNoAndSection returns an IEnumerable&lt;Machine&gt;. Depending on how the method is implemented, iterating the enumeration may query the database. In HandleLocationCount you are iterating it and also calling .Count() on it several times. The LINQ Count extension method might also iterate the enumeration.
Make sure to iterate it only once, e.g. by working on a list crated with var list = AmountOfMachines.ToList();, if something like this is not already done in GetMachinesByOrderNoAndSection.
Also, you could use two distinct variables for storing newLocation and AmountOfMachines.Count() + 1 and call the latter only once.

I am not sure to understand the logic right. But you seem to assign the same AmountOfMachines.Count() + 1 to all the Keep_Last machines. If this is the case, you could simply assign them a constant number like Int32.MaxValue. They would be kept last once and for all.
Another possible approach is to partition the number range into two ranges:

[1 .. Int32.MaxValue / 2] for Blank.
[Int32.MaxValue / 2 + 1 .. Int32.MaxValue] for Keep_Last.

Adavantages:

The machines stay in their respective group.
They are ordered.
Adding a machine at the end of a group does not require the LocationInSection of others to be updated.

Instead of getting the count, you would get the maximium value in the two groups.
int nextBlank = machineList
    .Where(m =&gt; m.ForcedLocation == ForcedLocation.Blank)
    .DefaultIfEmpty(0)
    .Max() + 1;
int nextKeepLast = machineList
    .Where(m =&gt; m.ForcedLocation == ForcedLocation.Keep_Last)
    .DefaultIfEmpty(Int32.MaxValue / 2)
    .Max() + 1;