R, <s>30</s> 27 bytes
=

    rev(rev(scan(,'')[-1])[-1])

Takes input from stdin, returns each middle name as a separate string. Returns `character()` in the case of no middle name; that is, a vector of class `character` of length `0`.

**Explanation:**

 Read stdin into a list of strings, separated by spaces

            scan(,'')
Remove the first element (i.e. the first name).

            scan(,'')[-1]
Reverse this list, and remove the first element (i.e. the surname).

        rev(scan(,'')[-1])[-1])
Reverse this list again, and it's the middle name(s) in the original order.

    rev(rev(scan(,'')[-1])[-1])