You don't need to use built in functions, just write your own. It'll run continually until what you put inside Until() returns as true (or an object) or times out per the WebDriverWait you setup. Quick sample from my code waiting to ensure a driver is open with available windows before doing anything.
wait.Until(d => d!= null && d.WindowHandles != null && d.WindowHandles.Count > 0);
or waiting for javascript ajax calls to complete
wait.Until(d => (bool)(d as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0"));
This is how the ElementIsVisible wait helper is implemented
Lookup these 2 very simple functions in there, you should be able to do something similar Where they returned the object when it's displayed you can just return false if it's displayed and true if it's not.
public static Func<IWebDriver, IWebElement> ElementIsVisible(By locator)
&
private static IWebElement ElementIfVisible(IWebElement element)