Actually, a proc already exists which converts a list of lists to a multirow data source. The name of the proc is somewhat misleading, as it is called template::util::list_to_multirow.
As far as I can tell, multirow datasources don't set anything that can be used for the not nil test. I've always used <if @foo.rowcount@ gt 0> to test for not nil, so I've never noticed the problem of not nil failing to work. It's not quite the same thing, but if you do a db_multirow query that returns no rows, it will still set the rowcount to 0.