Only return recordset(s) from Stored Procedure if it has rows
I have a stored procedure that returns multiple recordsets for use in an application. Sometimes some of those recordsets are empty.
I'd like to reduce overhead and only return those which have 1 or more rows.

That's a terrible idea.  How is the application going to know what resultset it is processing?  Stored procedures should have a fixed set of resultset shapes.
That being said, to do this load the results into temp tables, and then SELECT from those if they are non-empty.
eg
CREATE PROCEDURE bfsp_PROC_NM
AS 

    BEGIN
        SELECT * 
        into #result1
        FROM TABLE_1
        if @@rowcount &gt; 0
          select * from #result1

        SELECT * 
        into #result2
        FROM TABLE_2
        if @@rowcount &gt; 0
          select * from #result2

        SELECT * 
        into #result3
        FROM TABLE_3
        if @@rowcount &gt; 0
          select * from #result3

    END
GO