Here is what I have come up with so far.....
it is getting closer.
Derived from Malanie's suggestion about parsing data and DT's averaging scheme * PIC18F2525 @ 8 MHz
Code:
ByteData var byte                                                                                                      
CounterA    var word             ' sort counter
CounterB    var byte
CounterC    var byte
DataA       var word             ' storage for sorted values
DatSort     var byte             ' pointer to middle 8 values
DatAvg      var word             ' averaged value of sorted data
RawData     var word[16]         ' storage for raw data
Clear
AvgCount	CON  8		         ' = Number of samples to average
FAspread	CON  1000	         ' = Fast Average threshold +/-
INCLUDE "AllDigital.pbp"
DEFINE OSC 8
OSCCON = %01110000
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
DEFINE HSER_SPBRG 34  ' 57600 Baud @ 8MHz, -0.79%
SPBRGH = 0
BAUDCON.3 = 1         ' Enable 16 bit baudrate generator

hserout["SortAverage",10,13]
pause 500
goto Start

'Sort Array SUB ** collects 16 readings, sorts, and averages middle 8 ******
SortArray:
    CounterA=0
SortLoop:                          ' sorts 16 readings of RawData in order
    If RawData(CounterA+1) < RawData(CounterA) then
        DataA=RawData(CounterA)
        RawData(CounterA)=RawData(CounterA+1)
        RawData(CounterA+1+0)=DataA
        If CounterA > 0 then CounterA=CounterA-2
        endif
    CounterA=CounterA+1
    If CounterA < 15 then goto SortLoop
'    for CounterC = 0 to 15        ' These three lines O/P the sort results
'    hserout["Ordered[",dec CounterC,"]= ", dec RawData[CounterC],10,13] 
'    next CounterC
'**** Trim and Average ***************************************************
   for DatSort = 4 to 11                    ' pick out middle 8 readings
    IF ABS (DatAvg - RawData[DatSort]) > FAspread Then CatchUp
    IF ABS (DatAvg - RawData[DatSort]) < AvgCount Then RealClose
    DatAvg = DatAvg - (DatAvg/AvgCount)
    DatAvg = DatAvg + (RawData[DatSort]/AvgCount)
    GoTo AVGok
  CatchUp:
    DatAvg = DatAvg + (RawData[DatSort]/8)  ' catch-up by 1/8 value of reading
    GoTo AVGok
  RealClose:
    DatAvg = DatAvg - (RawData[DatSort]/(AvgCount/4))
    DatAvg = DatAvg + (DatAvg/(AvgCount/4))
  AVGok:
' hserout["Middle[",dec datsort,"] = ",dec RawData[DatSort],10,13] 'SHOW mid 8
   next DatSort
    Return  
'** END SUB************************
Start:
      FOR CounterB=0 to 15
     HSERIN [RawData[CounterB]]
      NEXT CounterB      
      FOR CounterB=0 to 15
      HSEROUT["RawData[",DEC counterB,"] = ",DEC rawdata[CounterB],10,13]
      NEXT CounterB
      CALL SortArray
      HSEROUT ["Sorted Averaged result ",dec DatAvg,10,13]
     GOTO start