Lo que está haciendo es válido:ordenará los resultados en orden descendente por a
pero aleatoriza el orden de los empates.
Sin embargo, para hacer lo que quiere, primero debe usar una subconsulta para obtener los últimos 100 registros y luego ordenar los resultados de esa subconsulta aleatoriamente usando una consulta externa:
SELECT * FROM
(
SELECT * FROM table1
ORDER BY date DESC
LIMIT 100
) T1
ORDER BY RAND()