Ответ
Вызов requestLayout() не гарантирует вызов onDraw().
requestLayout() запрашивает перерасчет layout (размеры и позиции), но не триггерит перерисовку. Для этого нужно вызвать invalidate(), который помечает View как "грязную" и вызывает onDraw() в следующем цикле рендеринга.
Пример:
view.requestLayout() // Пересчитает layout, но не вызовет onDraw()
view.invalidate() // Вызовет onDraw()
Исключение: если изменение layout (например, размеров) приводит к изменению внешнего вида View, система может автоматически вызвать invalidate(). Но полагаться на это не стоит.