What exactly happened with the Flight Computers on XL Airways Germany Flight 888T?
Tl;dr it was in direct law because air data was inconsistent and the landing gear was down. 

For a full answer to why the aircraft did what it did I'll answer a few questions one at a time.

Why did the flight computers reject the good sensor and use the frozen ones?

The values of the sensors are fed to the control computers by the ADIRU (air data and inertial reference unit). There are three ADIRU's, each corresponding to three redundant systems of sensors. Part of the ADIRU is the ADR (air data reference). The ADR is responsible for determining the validity of the values coming from the air data sensors (pitot tube, static port and AoA vanes), correcting those values from local AoA to airplane AoA and feeding the values to the control computers. (local AoA at the sensor location is not necessarily the same as the overall airplane AoA due to their positioning on the plane.) Each ADR uses two resolvers for each sensor and compares these values for consistency. Along with the value it also sends to the control computers an indication as to whether the values are valid or not. 

The ELAC (elevator/aileron computer), which controls movement of the flight surfaces takes the values from each ADIRU and compares them against the median value. If a sensor deviates from the median value past a certain threshold it assumes sensor failure and rejects the input. It then uses the average value of the other two. 

Unfortunately for the crew of XL888t this method anticipates a single sensor failure. When two sensors fail at the same or similar value the system will reject the working sensor. There is really no way to overcome this, but having two sensors fail at the same value is exceedingly unlikely.

Why did the control laws degrade?

This is really the crux of the question. The ELAC is what determines the control laws. It uses information from the aircraft configuration (flaps, slats, air brakes, undercarriage)and the output of the ADIRU to determine how to interpret the pilot's control inputs. It uses this information to determine the α protection speeds (α-prot, α-floor and VLS) and when to engage the automatic envelope protections. 

Normally when the aircraft slows the AoA increases unless a nose down input is given. In the case of XL888t the pilots were intentionally trying to put the plane into a stall in order to demonstrate the α protections. The elevator and stabilizer were in full up position and the engines were slowed. The ELAC will allow this position until it reaches the calculated values for α protection. In this case the AoA was not changing. When the parameters the ELAC is using get so far out of their thresholds the ELAC can no longer make the necessary calculations, so the α protections are disabled and control law is degraded to alternate. 

So why did it go into direct law?

The test the crew was performing at the time was low  speed  check  in  landing  configuration." Landing configuration obviously indicates that the landing gear be down. In alternate law roll control is in direct law, but pitch control is still as it is in normal law, with automatic trim, etc.,except without α  protections. But when the landing gear is down the pitch control shifts to direct law and autotrim is disengaged. The "USE MAN PITCH TRIM" warning is displayed on the PFD.  It's the pilots' failure to notice this warning that resulted in the crash.

As to why the control laws are designed this way I can't say. Maybe someone else can explain why Airbus made that choice.

Note: All of this information was taken from the BAE final report.