Mean of integers, ignoring the largest and smallest values
Well, whenever you want to know which function is better, you should test them.

First, your custom functions are just re-inventing the wheel, so you should only use them if you have to (either because it is mandated or they are actually faster, more secure, more memory-friendly, more whatever).

When running your functions with growing number of numbers, this is what I get:



Here, Input is the length of the numbers list, generated with numpy.random.random_integers(-10, 10, size=n), with \$n\in [10, 10000]\$.

So, for larger lists, the difference between your own function and the sorting function is negligible. The sorting should be \$\mathcal{O}(n\log n)\$, but I don't see why your function seems to show a similar behavior.

The sum/min/max function should be \$\mathcal{O}(3n)\$, so wins for large lists.

For smaller sizes, the two simple implementations perform similarly and your functions slightly slower:



This is for numpy.random.random_integers(-100, 100, size=n), with \$n\in [10, 100]\$.

All measurements were done in Python 2.7.13. I put your last two snippets into functions:

def centered_average_sum(numbers):
    return (sum(numbers) - max(numbers) - min(numbers)) // (len(numbers) - 2)


def centered_average_sort(numbers):
    centered_numbers = sorted(numbers)[1:-1]
    return sum(centered_numbers) // len(centered_numbers)


Note that I fixed a superfluous closing bracket on the second function.