Find inside faces of room using Python
So with the tip from @batFINGER I was able to build a solution using scene raycast.
for obj in bpy.data.objects:

            if 'wall_' in obj.name:
                bpy.context.view_layer.objects.active = obj

                mesh = obj.data
                bm = bmesh.new()
                bm.from_mesh(mesh)
                bm.faces.ensure_lookup_table()

                for i in range(len(bm.faces)):
                    mesh.polygons[i].select = False
                    face_location = bm.faces[i].calc_center_median()

                    # side face
                    if face_location[2] != self.wall_height and face_location[2] != 0:
                        hit, loc, norm, idx, ob, M = bpy.context.scene.ray_cast(
                            bpy.context.view_layer,
                            face_location + mesh.polygons[i].normal,
                            mesh.polygons[i].normal
                        )

                        if hit: 
                            mesh.polygons[i].select = True

                # toggle to edit mode
                bpy.ops.object.mode_set(mode='EDIT')

                # make sure face select mode is enabled
                bpy.context.tool_settings.mesh_select_mode = [False, False, True]

                # use second material slot
                obj.active_material_index = 2

                # assign the material
                bpy.ops.object.material_slot_assign()

                # toggle to object mode
                bpy.ops.object.mode_set(mode='OBJECT')